Unique identification method for remote diagnostics, maintenance and control system over SNMP

ABSTRACT

The present invention relates to determining the unique identification of an interfacing device. The interfacing device is first queried utilizing the hierarchical relationship of the interfacing devices communication means to acquire the unique identification. If this querying is unsuccessful, then a standard communication means (i.e. SNMP) is utilized to acquire the unique identification from the interfacing device. If use of the standard communication means is also unsuccessful, then assign a random code for the unique identification of the interfacing device.

CROSS REFERENCES TO RELATED APPLICATIONS

This application is related to commonly owned co-pending U.S. patentapplication Ser. No. 09/756,120, filed Jan. 9, 2001, entitled “Methodand System of Remote Support of Device Using Email,” which isincorporated herein by reference.

BACKGROUND OF INVENTION

1. Field of Invention

The present invention is related to monitoring, configuration orinstallation of hardware on a computer system.

2. Discussion of the Background

In general, computer systems include hardware and software. Hardware isthe actual physical computing machinery, while software is the list ofinstructions to operate the hardware. Typically, computer systems willinclude a variety of hardware devices that interface with one another.When hardware devices interface with one another, it is necessary forthe software which operates the hardware to be configured to allowcommunication between the hardware devices, so that the hardware devicescan operate cooperatively. It is also desirable for hardware devices tobe monitored. For the purposes of discussion, a hardware device that isconfiguring or monitoring will be referred to as a controlling device.Likewise, for the purposes of discussion, the hardware device that isbeing configured to operate cooperatively or being monitored by thecontrolling device will be referred to as an interfacing device.

When hardware devices initially interface with one another, it is commonfor the software that operates the devices to not be configured to allowcooperative operation. Accordingly, a significant part of installingcomputer hardware devices together is configuring the software. In somearrangements, a user must configure the computer hardware manually byopening the computer hardware and physically setting jumpers or dipswitches. In some arrangements, the installation process includes a userloading software from a floppy disk to configure the hardware devices.There have also been attempts for computer hardware devices to includesoftware that can automatically configure hardware devices. However,there are some apparent disadvantages and deficiencies of theseattempts.

One disadvantage is that automatic hardware installation software islimiting in its ability to adapt to new devices or to new manufacturersthat were not specifically programmed into the software. In the priorart, if the controlling device does not recognize the specific model ofthe interfacing device, automatic configuration is not possible. Inother words, in the prior art, if the controlling device is notprogrammed to anticipate the model of an interfacing device, thenautomatic hardware configuration will not be successful. In such acircumstance, a user will have to manually install the configurationcommunication means to the hardware devices.

Another disadvantage of the prior art is that the controlling device isunable to partially configure hardware devices if the particular modelof the interfacing device cannot be identified. In other words, if acontrolling device cannot identify a specific model of the interfacingdevice, then the interfacing device will not be configured to operatecooperatively. This results in the unconfigured interfacing device beinginoperable and essentially useless.

For hardware devices that are located on a network, it is desirable forthese devices to be monitored for maintenance, usage, or other purposes.However, it has been difficult for a controlling device to communicatewith various interfacing devices on a network given the differentcommunication means between manufacturers and models of interfacingdevices. This disadvantage is problematic, as administrators of networksare unable to obtain crucial information about the performance andefficiency of interfacing devices on a network.

SUMMARY OF THE INVENTION

Accordingly, it is the object of the present invention to provide amethod and apparatus that overcomes the above-mentioned deficiencies ofthe prior art. The present invention relates to a method for acontrolling device to operate cooperatively with an interfacing device.In general, the controlling device is a computer hardware device whichcommunicates with the interfacing device. The interfacing device is alsoan office device, such as a printer, scanner, digital copier, stampmachine, or household appliances. The controlling device queries theinterfacing device for the identity of the manufacturer of theinterfacing device. Based on the determined identity of the manufacturerof the interfacing device, the controlling device then queries theinterfacing device for the identity of the model of the interfacingdevice. Based on the information queried from the interfacing device,the controlling device establishing a communication with the interfacingdevice by creating software objects through the software factory.

This method is a hierarchical approach for establishing a communicationmeans between a hardware device and an interfacing device. Thishierarchical approach is advantageous, as once the manufacturer of theinterfacing device is determined by the controlling device, thecontrolling device can determine the model of the interfacing deviceusing communication means that are specific to the identifiedmanufacturer of the interfacing device, according to an embodiment ofthe invention. In other words, once the controlling device determinesthe manufacturer of the interfacing device, knowledge of specificmanufacturer can be taken advantage of to determine the model of theinterfacing device.

One advantage of this hierarchical approach is that it is an effectivemechanism establishing the most effective communication means betweenthe controlling device and the interfacing device. This is evident andapparent, as once the controlling device has identified the manufacturerof the interfacing device, it is possible for the controlling device todetermine the model-specific communication means of the interfacingdevice. In other words, once the manufacturer of the interfacing deviceis identified, the controlling device has enough information about theinterfacing device to decipher the model of the interfacing device. Thisadvantage is significant, as it offers some versatility as to how thecontrolling device determines the actual model of the interfacingdevice.

In some instances, the model of the interfacing device may be readilyidentified from a query of the interfacing device and using suchinformation from a query, the controlling device can establish acommunication means according to communication means that are specificto the identified model of the interfacing device.

In other instances, the controlling device may not be able to identifythe model of the interfacing device through a query of the interfacingdevice. In such instances, the controlling device of the presentinvention can then employ alternative means for establishing aneffective communication means. One such means is electronicallycommunicating with the manufacturer of the interfacing device anddownloading updated software communication means and modelidentification codes. In such an arrangement, a controlling device, withupdated manufacturer information, can then successfully re-query theinterfacing device for the specific model.

In other instances, the controlling device may not be able tocommunicate electronically with the manufacturer of the interfacingdevice. However, in these instances, the controlling device may be ableto decipher the communication means of the interfacing device by tryingthe use of other communication means of other models from themanufacturer of the interfacing device. This would be a trial and errorprocess and may result in a compromise of the maximum configurability ofthe interfacing device, but would deem the interfacing device operableor monitorable.

In all of these arrangements, the manufacturer of the interfacing devicemust be known. This is apparent, as there are so many manufacturers andso many models of interfacing devices that it would not be possible orpractical to decipher the communication means of the interfacing devicewithout some additional information about the interfacing device, suchas the manufacturer.

Another advantage of the present invention is the ability of thecontrolling device to adapt to the communication means used with aninterfacing device. In an instance when either the manufacturer or modelof the interfacing device cannot be determined, the controlling devicemay be able to use communication means that are universal to alldevices. Alternatively, if the manufacturer is identifiable but themodel is not, then the controlling device can utilize communicationmeans that are specific to all devices of the identified manufacturer.Alternatively, it is common that hardware devices have basic universalfeatures, which all hardware devices of that type have and all utilizethe same communication means. Accordingly, the controlling device of thepresent invention can utilize these universal features using a standardcommunication means, according to an embodiment of the invention. Takingthis one step further, all devices of a particular manufacturer may havesome special features that are specific to that manufacturer. Thesefeatures may all share the same communication means regardless of thespecific model. If the controlling device is able to identify themanufacturer of the interfacing device, then the controlling device canmaximize communication, even without specific model identification ofthe interfacing device. Of course, if a model of a particularinterfacing device is determinable, the controlling device will be ableto identify all of the communication means associated with that specificmodel of interfacing device.

Accordingly, the present invention is an improvement over the prior art,as the controlling device is able to maximize the effectiveness of thecommunication means with the interfacing device by taking advantage ofthe information the controlling device can obtain from the interfacingdevice to establish a communication means.

The present invention also has the advantage of being self-teaching or asmart device. As a controlling device interacts with interfacingdevices, the controlling device is able to learn the nature ofcommunication means of a particular manufacturer or a particular classof interfacing device models. The controlling device may be able todecipher several communication means from the interfacing device by atrial and error process of probing the interfacing device. Thisadvantage allows maximization of the established communication means ofinterfacing devices, even when a manufacturer or model of interfacingdevices cannot be easily identified.

Embodiments of the present invention relate to creating device objectsfor maintaining communication between a interfacing device and acontrolling device. These device objects are software object or softwareprograms that are created according to information that is queried fromthe interfacing device. As a device object is created for eachinterfacing device, computer system resources are preserved duringoperation.

Embodiments of the present invention relate to querying an interfacingdevice to determine the manufacturer and model of the interfacingdevice. The querying is accomplished by first inputting signals withknown communication means of particular manufacturers. By comparing theresponses of the interfacing device of these signals and comparing themto anticipated responses, the manufacturer of the interfacing device canbe determined. The anticipated response is the known response to theinputted signals of a particular manufacturer. In other words, themanufacturer of an interfacing device can be deducted according to itsreaction to predetermined input signals. If the manufacturer of theinterfacing device is indetermninable, then a universal or genericcommunication means is assigned to the interfacing device. If themanufacturer of the interfacing device is determined, the interfacingdevice is queried in a similar fashion to the querying of the model.However, if the model of the interfacing device is indeterminable, thena generic or universal communication means in compliance with thedetermined manufacturer communication means is assigned to theinterfacing device.

Embodiments of the present invention relate to determining the uniqueidentification of an interfacing device. The interfacing device is firstqueried utilizing the hierarchical relationship of the interfacingdevices' communication means to acquire the unique identification. Ifthis querying is unsuccessful, then a standard communication means (i.e.SNMP) is utilized to acquire the unique identification from theinterfacing device. If use of the standard communication means is alsounsuccessful, then assign a random code for the unique identification ofthe interfacing device.

Embodiments of the present invention relate to sending control ormonitoring information between two hardware devices utilizing email.Control information relating to either a first hardware device or asecond hardware device is determined. This information is incorporatedinto an email message. Directing information for directing the controlinformation is incorporated into the email message. These embodimentsare advantageous, as two hardware devices can operate cooperatively overdifferent remote networks of computer networks. These networks only needto be compatible in the ability to exchange email for communication topersist between the two hardware devices.

In embodiments of the present invention the control information and/orthe directing information are encrypted. In embodiments of the presentinvention, the control information and/or the directing information areencoded. In embodiments of the present invention the encoding map isencrypted. These embodiments utilizing encryption and encoding improvedata security for the communication between the two hardware devices.

Other advantages of the present invention would be obvious to one ofordinary skill in the art, in view of this specification.

BRIEF DESCRIPTION OF THE DRAWINGS

A more complete appreciation of the present invention and many of theattendant advantages thereof will be readily obtained as the samebecomes better understood by god reference of the following detaileddescription when considered in connection with the accompanyingdrawings.

FIG. 1 illustrates the relationship between a plurality of hardwaredevices and computer networks.

FIG. 2 illustrates different communication means that are used in thecommunication between different hardware devices.

FIG. 3 illustrates a hierarchy of interface communication means.

FIGS. 4 and 5 are flowcharts of the utilization of the hierarchicalrelationship of communication means for a controlling device toestablish a communication means with an interfacing device according totwo respective embodiments of the present invention.

FIG. 6 illustrates an exemplary architecture of the present inventionwith the major interfaces of the modules.

FIG. 7 illustrates the MonitorSend DLL configuration according to oneexemplary implementation of the present invention.

FIG. 8 illustrates the MonitorSend Intialization Sequence according toone exemplary implementation of the present invention.

FIG. 9 illustrates the Sending Configuration Sequence according to oneexemplary implementation of the present invention.

FIG. 10 illustrates the Sending Status Sequence according to oneexemplary implementation of the present invention.

FIG. 11 illustrates the ReceiveStore DLL configuration according to oneexemplary implementation of the present invention.

FIG. 12 illustrates an exemplary class structure inside of theDeviceFactory Package (Module).

FIG. 13 illustrates an exemplary class structure of the Device Package(Module).

FIG. 14A is a flowchart that shows the exemplary initialization processwhen executing the initMonitorSendDLL( ) function ofCSendInterfaceManager.

FIG. 14B is a flowchart that shows the exemplary initialization processwhen executing the initMonitorSendDLL( ) function ofCSendInterfaceManager.

FIG. 14C is a flowchart that shows the exemplary initialization processwhen executing the initMonitorSendDLL( ) function ofCSendInterfaceManager.

FIG. 14D is a flowchart that shows the exemplary initialization processwhen executing the initMonitorSendDLL( ) function ofCSendInterfaceManager.

FIG. 15 shows a flowchart of how a device object is created by thecreateDevice function of CFactoryInterface.

FIG. 16 shows the flowchart of how a device object, CRicohDevice,RicohAP2600NDevice, or CRicohAficio120Device, is created by thecreateDevice function of CRicohFactory.

FIG. 17A shows the flowchart of the function checkManufacturer of theCSNMP class.

FIG. 17B shows the flowchart of the function checkManufacturer of theCSNMP class.

FIG. 18A shows the flowchart of the function checkModel of the CSNMPclass.

FIG. 18B shows the flowchart of the function checkModel of the CSNMPclass.

FIG. 19 shows the class diagram of the Data Transfer Package.

FIG. 20 is a flowchart describing the resetEncrypter( ) function ofCSimpleEncrypter.

FIG. 21A is a flowchart describing the encryptData( ) function ofCSimpleEncrypter.

FIG. 21B is a flowchart describing the encryptData( ) function ofCSimpleEncrypter.

FIG. 22 is a flowchart describing the scrambling method used to scramblethe information about the monitored devices before placing it into theemail message.

FIG. 23 shows the format of the email message sent by the Data TransferPackage.

FIG. 24 an example of the email message created in CMailMessage.

FIG. 25 is a flowchart for creating the email message.

FIG. 26 is a flowchart for a sample verification in which the subjectand date field are used.

FIG. 27 shows the package diagram of a ReceiveStore package.

FIG. 28 shows the class diagram of the POP3Processor.

FIG. 29 is an interaction diagram describing the interaction between theclasses in retrieving the email message.

FIG. 30 is a flowchart for parsing the email message.

FIG. 31 is a flowchart for a sample verification in which the subjectand date field are used.

DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS

Embodiments of the present invention relate to a method for acontrolling device to establish a communication means for an interfacingdevice. The method comprises the following steps: Realizing the locationof the interfacing device. Updating in the first database the locationof the interfacing device. Querying the interfacing device for theidentity of the manufacturer of the interfacing device. Updating in thefirst database the manufacturer of the interfacing device, if thequerying for the manufacturer of the interfacing device is successful.Querying the interfacing device, utilizing the identity of themanufacturer, for the identity of the model of the interfacing device,if the querying of the interfacing device for the identity of themanufacturer of the interfacing device is successful. Updating in thefirst database the identity of the model of the interfacing device, ifthe query for the identity of the model of the interfacing device issuccessful. Establishing a communication means for the interfacingdevice according to information stored in the first database.

In embodiments of the present invention, if the querying of theinterfacing device for the identity of the manufacturer of theinterfacing device is successful and the querying of the interfacingdevice for the identity of the model of the interfacing device isunsuccessful, then the step of establishing a communication means forthe interfacing device is according to an interfacing protocol that isparticular to all devices manufactured by the manufacturer of theinterfacing device.

In embodiments of the present invention, if the querying of theinterfacing device for the identity of the manufacturer of theinterfacing device is unsuccessful and the querying of the interfacingdevice for the identity of the model of the interfacing device isunsuccessful, then the step of establishing a communication means forthe interfacing device is according to an interfacing protocol that iscommon to all devices.

In embodiments of the present invention, the step of querying theinterfacing device for the identity of the model of the interfacingdevice utilizes the identity of the manufacturer of the interfacingdevice to query the interfacing device with model identification codesthat are particular to the manufacturer of the interfacing device.

In embodiments of the present invention, the method comprises a furtherstep of querying the interfacing device with a unique identification ofthe interfacing device prior to the step of querying the interfacingdevice for the identity of the manufacturer of the interfacing device.

In embodiments of the present invention, the unique identification ofthe interfacing device is a unique sequence of data designated to theinterfacing device by the manufacturer of the interfacing device.

In embodiments of the present invention, the step of updating in thefirst database the location of the interfacing device includes updatinga unique identification of the interfacing device in the first database.

In embodiments of the present invention, interfacing device is queriedusing simple network management protocol.

In embodiments of the present invention, the step of realizing thelocation of the interfacing device is accomplished by automaticallydetecting that the interfacing device is electrically coupled to thecontrolling device.

In embodiments of the present invention, the step of realizing thelocation of the interfacing device is accomplished by an input by auser.

In embodiments of the present invention, the controlling device and theinterfacing device are network computer devices coupled to one anotherby a network. In embodiments of the present invention the step ofrealizing the location of the interfacing device is accomplished by thecontrolling device detecting that the network location of theinterfacing device has changed. In embodiments of the present inventionthe location of the interfacing device is a network location of theinterfacing device on the network. In embodiments of the presentinvention the network location of the interfacing device is an internetaddress.

In embodiments of the present invention, the first database can beaccessed by an interfacing that is independent of the database fileformat. In embodiments of the present invention, the first databasecomplies with the ODBC standard.

In embodiments of the present invention, at least a portion of the firstdatabase is duplicated on a second database.

In embodiments of the present invention, the second database is updatedwith at least a portion of the first database by utilizing transferthrough email. In embodiments of the present invention, the transferdata through e-mail utilizes a simple mail transfer protocol.

Embodiments of the present invention relate to a method for acontrolling device to establish a communication means for an interfacingdevice. The method comprising the following steps: Querying theinterfacing device for an identity of a manufacturer and the identity ofthe model of the interfacing device. Establishing a communication meansfor the interfacing device using a communication means that is common toall interfacing devices if the querying of the interfacing device didnot identify either the manufacturer and the model of the interfacingdevice. Establishing a communication means for the interfacing deviceusing a communication means that is common to all interfacing devices ofthe manufacturer if the querying of the interfacing device identifiedthe manufacturer of the interfacing device and the querying of theinterfacing device did not identify the model of the interfacing device.Establishing a communication means for the interfacing device using acommunication means that is particular to the model of the interfacingdevice if the querying of the interfacing device identified both themanufacturer and the model of the interfacing device.

Referring now to the drawings, wherein like reference numbers identifythe same or similar parts and more particularly to FIG. 1 thereof, thereis illustrated an exemplary illustration of interaction between varioushardware devices and computer networks. Work station 10 is an exemplarycontrolling device and is arranged to store data in database 20. Camera12 is depicted coupled to work station 10. Camera 12 illustrates aninterfacing device directly coupled to work station 10 and capable ofbeing automatically configured on or monitored by work station 10. Workstation 10 is also coupled to local area network (LAN) 18. LAN 18 iscoupled to POP3 server 14, SMTP server 16, printer model A 22, andgateway server 26. Printer model A 22 illustrates an interfacing devicethat is a network H; printer. SMTP server 16 is a Simple Mail TransferProtocol (SMTP) server that operates to send mail from work stationscoupled to LAN 18, such as work station 10. One of ordinarily skill inthe art should recognize that a plurality of work stations may becoupled to LAN 18, and work station 10 is merely an exemplary workstation. These plurality of work stations may also be controllingdevices or these other work stations may rely on work station 10 forautomatic configuration or monitoring of hardware devices. POP3 server14 is a Post Office Protocol server that receives email for work station10 and the other work stations (not shown) coupled to LAN 18. Gatewayserver 26 allows LAN 18 to communicate in a wide area network (WAN) 24.WAN 24 may be the internet or another type of wide area network.

LAN 34, gateway server 28, printer model B 30, SMTP server 42, POP3server 40, work station 32, database 38, and scanner 36 are shown andare analogous to LAN 18, gateway server 26, printer model A 22, SMTPserver 16, POP3 server 14, work station 10, database 20, and camera 12respectively. These analogous devices and local area networks illustratehow two local area networks 18 and 34 can be coupled by a wide areanetwork 24. Further, LAN 34 may include a plurality of work stations(not shown) which may be configured to operate cooperatively withinterfacing devices of either LAN 18 or LAN 34.

For instance, work station 32 may be configured to operate printer modelA where work station 10 may be configured to operate scanner 36. This ismade possible by communication between local area network (LAN) 18 andlocal area network (LAN) 34 through wide area network (WAN) 24 enabledby gateway servers 26 and 28.

Scanner 36 is analogous to camera 12 as interfacing device directlycoupled to work station 32. Printer model B 30 is analogous to printermodel A 22 except that it is a different model and possibly a differentmanufacturer.

Database 20 and database 38 store information relating to variousinterfacing devices, such as camera 12, printer model A 22, printermodel B 30, and scanner 36. Work stations 10 and 32 are in communicationwith other work stations (not shown) through LAN 18 and LAN 34 tocommunicate between these work stations (not shown) with theseinterfacing devices. In embodiments of the present invention, workstation 10 could be the controlling device for all of the interfacingdevices 12, 22, 30, and 36 shown in FIG. 1. In other embodiments of thepresent invention, both work station 10 and work station 32 could becontrolling devices arranged to communicate over local area network(LAN) 34. Accordingly, information relating to the interfacing devicescan be stored on database 38 to allow for the establishment ofcommunication means for communication with the interfacing devices. Asnetworks are often complex, it may be necessary for there to be severalcontrolling devices on a network, such as work station 10 and workstation 32. It is also most efficient for such controlling devices 10,32 to exchange data to maximize the usability of interfacing devices 12,22, 30, and 36. Accordingly, data stored on database 20 can beperiodically updated on database 38 by sending email messages throughSMTP server 16 and routed through LAN 18, gateway server 26, WAN 24,gateway server 28, and LAN 34 to POP3 server 40. Work station 32 maythen arranged to download the email message from work station 10 throughPOP3 server 40. The content of the email message may includeconfiguration data that is stored on database 20 to be copied ondatabase 38. The work station 32 is arranged to receive an email messageand automatically update database 38 based on particular communicationmeans of email exchange that are pre-programmed in work station 10 andwork station 32. Similarly, database 20 can be updated from that storedin database 38 in an identical fashion utilizing SMTP server 42, LAN 34,gateway server 28, WAN 24, gateway server 26, LAN 18, and POP3 server14.

FIG. 2 is an exemplary illustration of the communication meansinteraction between various hardware devices. Printers 52, 54, 68, and80 are exemplary interfacing devices that are coupled to controllingdevice 44. These interfacing devices 52, 54, 68, and 80 communicate overSimple Network Management Protocol (SNMP) as shown by blocks 50, 58, 70,and 78. SNMP is a common communication means by which network managementapplications can query devices. SNMP operates at the open systemsinterconnection (OSI) application layer. The internet based SNMP is thebasis of most network management software. SNMP was designed as UDP onIP network management protocol, that can manage virtually any networktype and has been extended to include IP as routers and bridges. SNMP iswidely deployed in an IP (internet protocol) environment. SNMP can beimplemented over ethernet as well as OSI transport. SNMP is an Internetstandard and operates on top of the internet protocol. One of ordinarilyskill in the art should realize that an interfacing device does notnecessarily need to communicate over SNMP, and can communicate usingsimilar communication means. Interfacing device printer 52 communicatesover vendor unique communication means 50 with controlling device 44.Interfacing device printer 54 communicates with controlling device 44over SNMP 58 and IP 56. Printer 54 is a network printer and, therefore,is not directly coupled to the controlling device 44. Accordingly, theSNMP rides over the IP for printer 54. Interfacing device printer 80 iscoupled to wide area network (WAN) 76 and communicates with controllingdevice 44 over SNMP 78 and IP 56 similar to printer 54. Printer 68 isdirectly coupled to work station 72 and communicates with the workstation 72 over SNMP 70. Work station 72 communicates with WAN 76 overIP 74 and then with the communication means device over IP 56. SNMP 58,50, 70, and 78 are all identical. IP 56 and TCP/IP 74 are alsoidentical. Controlling device 44 communicates with database 46 over OpenDataBase Connectivity (ODBC) 48. ODBC is a standard that allowsdatabases created by various relational and non-relational databaseprograms to be accessed by a common interfacing. Such relational andnon-relational database programs include Microsoft Access, MicrosoftFoxPro, and Oracle. The interface is independent of the interface fileformat. By relying on ODBC, one can write an application that uses thesame code to read record from an Access file, for example. SMTP server66 is arranged for sending email and is coupled to controlling device 44over a local area network (not shown) using Simple Message TransferProtocol (SMTP) 64 and IP 56. POP3 server 62 is arranged to receiveemail from controlling device 44 and communicates with controllingdevice 44 using POP3 60 and IP 56.

FIG. 3 is a hierarchical relationship between established communicationmeans for the different interfacing device models. Block 82 is theestablished communication means common to all interfacing devices.Blocks 84 and 86 illustrate the communication means of two exemplarymanufacturers (Manufacturer A and Manufacturer B). Block 84 is theestablished communication means common to all interfacing devices ofManufacturer A, while block 86 is the established communication meanscommon to all interfacing devices of manufacturer B. Blocks 84 and 86are part of block 82. As part of block 84, blocks 88 and 90 are thecommunication means of different interfacing devices that havedifferences in communication means. Blocks 88 and 90 are part of block84 which is part of block 82. Blocks 92 and 94 are analogous to blocks88 and 90 but particular to exemplary manufacturer B. This diagramillustrates the hierarchy of communication means. In general, allcommunication means of block 82 are also common to blocks inside block82. However, the communication means in blocks 84, 88, 90, 86, 92, and94 are not necessarily completely compatible with the communicationmeans in block 82.

FIG. 4 is a flowchart illustrating embodiments of the present inventionin which the hierarchical relationship of communication means for acontrolling device is utilized to establish a communication means for aninterfacing device. Block 96 illustrates a controlling device realizingthe location of the interfacing device. In embodiments of the presentinvention, the realizing of the location of the interfacing device isaccomplished by an automatic detection that the interfacing device iselectrically coupled to the controlling device. This automatic detectionmay be any coupling of hardware devices or hardware components. Thisautomatic detection is often accomplished by hardware devices includingsoftware programs which monitor and track all of the input and outputsignals to the hardware device. Accordingly, if a new hardware device orcomponent is coupled to such a hardware device, its presence will bedetected.

In other embodiments, the step of realizing the location of interfacingdevices is accomplished by an input by a user. In such embodiments, theuser may input data into a controlling device which indicates that a newinterfacing device has been coupled to the controlling device. Such aninput may actually be a command for the interfacing device to beconfigured, however, the data input by the user must include thelocation of the interfacing device. The location of the interfacingdevice may be a network location of an interfacing device on a networkor possibly a port on a hardware device to which the interfacing deviceis coupled.

In some embodiments, the location of the interfacing device may includeboth a port on a hardware device and the network location of the networkdevice.

In other embodiments, the step of realizing the location of theinterfacing device is accomplished by the controlling device detectingthat a network location of an interfacing device has changed. In theseembodiments, the controlling device may be able to identify theinterfacing device, however in a different location. This differentlocation may either be a network location, a data port on a hardwaredevice, or a combination of both.

One of ordinarily skill in the art would realize that means forrealizing location of an interfacing device can include a wide varietyof events. The common feature of these events is that the controllingdevice becomes aware of the presence of an interfacing device. Thislocation realization may serve the purpose of starting the process ofautomatic configuration or monitoring of a new device that iselectrically coupled to a controlling device or may be the start of aprocess that confirms or updates the established communication means ofan interfacing device.

Block 98 illustrates that the controlling device queries the interfacingdevice for the unique identification of the interfacing device. Theunique identification may be a serial number, manufacturer number, MACaddress or other standard code those unique to the particularinterfacing device that the particular interfacing device can beidentified by. This information is useful to the controlling device toidentify and record an identity for the interfacing device so that theinterfacing device can be referenced and universally accessed.

Block 100 shows the updating of the location and the uniqueidentification of the interfacing device in a database. For the purposesof this discussion, a database is defined as a collection of datastructured and organized in a disciplined fashion so that it is possibleto quickly access information of interest. Accordingly, a database maybe comprised of either volatile or non-volatile memory that can beaccessed and updated for easy reference. Once the location of theinterfacing device is realized in block 96, it is important to updatethat information for reference in the database. Further, after the queryfor the unique identification of the interfacing device, it is importantto save that information to be referenced in the future. In someembodiments, the location and unique identification of the interfacingdevice are associated with one another in the database so that theinterfacing device can be either referenced by its unique identificationor its location on a computer or network. Likewise, in embodiments ofthe present invention, an identification of the interfacing device canbe translated from its location to its unique identification and viceversa.

One of ordinarily skill in the art would realize that a means forupdating a database with the location of an interfacing device includesany storage of network or physical location of the interfacing devicefor purposes of identifying where the interfacing device is located.Further, one of ordinarily skill in the art would realize that adatabase can include any kind of memory arranged to store data.

In block 102, the interfacing device is queried for the manufacturer ofthe interfacing device. One of ordinarily skill in the art would realizethat a means for querying an interfacing device for the manufacturer ofthe interfacing device would include any communication means that wouldaccess information of the manufacturer of an interfacing device. Such acommunication means may include sending a signal from the controllingdevice to the interfacing device and determining the manufacturer fromthe response received from the interfacing device. Querying of theinterfacing device could also include only receiving a signal from theinterfacing device which indicates the manufacturer. Further, queryingthe interfacing device may include analyzing signals emitted from theinterfacing device which are indicative of the manufacturer of theinterfacing device.

Blocks 104 and 106 illustrate the updating of the identity of themanufacturer of the interfacing device in the database if thecontrolling device is successful in querying the manufacturer. If thequerying of the identity of the manufacturer is not successful, then thecontrolling device does not update the database with such information.Accordingly, if the querying of the manufacturer is unsuccessful, theprocess progresses to block 114, which will be discussed below. One ofordinarily skill in the art would realize that a means for updating in adatabase the manufacturer of an interfacing device relates to anystorage of information that can be used as a reference of themanufacturer of the interfacing device.

In block 108, the interfacing device is queried for the model of theinterfacing device. This querying uses the identity of the manufacturerof the interfacing device. Further, the step performed in block 108 isnot performed if the manufacturer query of block 104 was unsuccessful.In embodiments of the present invention, the querying for the modelutilizes the identified manufacturer of the interfacing device by usingcommunication means that are specific to interfacing devices of theidentified manufacturer. In embodiments of the present invention, thequerying of an interfacing device for the model of the interfacingdevice includes the controlling device updating its knowledge ofinterfacing device communication means of a particular manufacturer, bycommunication with the manufacturer. Such communication may be eithermade by a user or automatic electronic communication to updatecommunication means records. One of ordinarily skill in the art wouldrealize that a means for querying an interfacing device, using theidentity of the manufacturer device for the identity of the model of theinterfacing device could be accomplished by any process or mechanismwhich utilizes the manufacturer information to help decipher the modelof the interfacing device.

In blocks 110 and 112, the identity of the model of the interfacingdevice is updated in the database if the model query is successful. Oneof ordinarily skill in the art would realize that the means of updatingthe database with the identity of the model of the interfacing deviceincludes any kind of storage of data that can be referenced at a latertime to access the model identity of the interfacing device.

Block 114 shows that the controlling device establishes a communicationmeans for the interfacing device according to the information stored inthe database. In embodiments of the present invention, the controllingdevice acts on behalf of other devices coupled to the controlling deviceon the network. In embodiments, once the controlling device has enoughinformation so that hardware devices can interact cooperatively with theinterfacing device, it communicates such information and communicationmeans to other hardware devices so that they can communicate with theinterfacing device. In embodiments of the present invention, thecontrolling device configures itself based on the information stored inthe database.

The information stored in the database may not comprise information asto the manufacturer of the interfacing device or the model of theinterfacing device, only the manufacturer of the interfacing device, orboth the model and the manufacturer of the interfacing device. Based onhow much information the controlling device can access from the databaseabout the interfacing device, the controlling device can deciphercommunication means for cooperative interaction with the interfacingdevice. Depending on what information is known about the interfacingdevice, communication means for the interfacing device can be identifiedthat will allow operation of the interfacing device with at least oneother hardware device. One of ordinarily skill in the art would realizethat a means for controlling at least one device to interface with aninterfacing device according to the information stored in a databaseutilizes an identified relationship between the identified model ormanufacturer of the interfacing device to the communication meansassociated with that interfacing device.

FIG. 5 is a flowchart illustrating embodiments of the present inventionin which the hierarchical relationship of communication means for adevice is utilized to configure a device for an interfacing device.Block 116 illustrates a controlling device querying an interfacingdevice for both the manufacturer and the model of the interfacingdevice. One of ordinary skill in the art would realize that a means forquerying the interfacing device for an identity of a manufacturer andthe identity of the model of the interfacing device can be accomplishedby any communication means that would access information of both themanufacturer and the model of the interfacing device. Such acommunication means may include sending a signal from the controllingdevice to the interfacing device and determining the manufacturer fromthe response received from the interfacing device. Querying of theinterfacing device could also include only receiving a signal from theinterfacing device which indicates the manufacturer and model. Further,querying the interfacing device may include analyzing signals emittedfrom the interfacing device which are indicative of the manufacturer ofthe interfacing device.

In block 118, the controlling device determines if the querying of theinterfacing device identified the manufacturer of the interfacingdevice. If the manufacturer is identified, the process flows to block120, which will be discussed below. If the manufacturer of theinterfacing device is not identified, then it can be assumed thatneither the manufacturer or the model of the interfacing device areidentified by the query of the interfacing device. This is evident andapparent, as if the model of an interfacing device is identified, themanufacturer of the interfacing device is also identified. For thepurposes of this patent application, the manufacturer of an interfacingdevice is the organization which provides customer support to thehardware. Such customer support necessarily includes the distribution ofsoftware drivers for the interfacing devices.

From block 118, if the querying of the interfacing device in block 116does not identify either the manufacturer or the model of theinterfacing device then the process flows to block 126. In block 126,the controlling device establishes a communication means for aninterfacing device using a communication means that is common to allinterfacing devices.

In block 120, the controlling device determines if the querying of theinterfacing device identified the model of the interfacing device. Ifthe model is identified, then the process flows to block 122, which willbe discussed below. If the model is not identified, then the processflows to block 124. In block 124, the controlling device establishes acommunication means for an interfacing device using a communicationmeans that is common to all interfacing device of the manufacturer ofthe interfacing device.

One of ordinary skill in the art should realize that the means forestablishing a communication means for an interfacing device using acommunication means that is either common to all interfacing devices,common to all interfacing device of the manufacturer of the interfacingdevice, or a communication means that is particular to the model of theinterfacing device is accomplished by any process that manipulates thecommunication means hierarchical of interfacing devices to maximize thefunctionability and usability of an interfacing device.

In block 122, the controlling device configures at least one device tointerface with an interfacing device using a communication means that isparticular to the model of the interfacing device.

FIG. 6 shows the major interfaces among the modules, as implemented inthis exemplary architecture.

void initSendTimer (void)

This function initializes the SendTimer. In particular, this functiontriggers the SendTimer object to get the timing information from theregistry.

void obtainDelayAndAction (int & out_nDelay, int & out_nAction)

This function returns the delay time in second for ::Sleep function(need to multiply 1000) and the action indicator (0 or 1).

int initMonitorSendDLL (void)

This function initializes the monitorSendDLL. In addition, it wouldcreate the devices to be monitored. The return int is the error code inwhich zero is defined as no error.

int sendconfig (void)

This function obtains the device information from ODBC and sends it. Thereturn int is the error code in which zero is defined as no error.

int monitorStatus (int in_nAction)

This function monitors the preset information for error checking. Inaddition, if in_nAction is one, it will monitor additional informationand send it to the destination along with storing into the localdatabase. The return int is the error code in which zero is defined asno error.

int endDLL (void)

This function cleans up the MonitorSend DLL before closing the objects.The return int is the error code in which zero is defined as no error.

int initReceiveStoreDLL (void)

This function initializes the various parts of DLL. The return int isthe error code in which zero is defined as no error.

int getMaiLAndUpdateDatabase (void)

This function triggers the ReceiveStore DLL to access the POP3 server toretrieve mails, to parse the retrieved mails, to delete the mails, andto store the extracted data into the database through ODBC. The returnint is the error code in which zero is defined as no error.

int endDLL (void)

This function cleans up the ReceiveStoreDLL before closing the objects.The return int is the error code in which zero is defined as no error.

FIG. 7 shows an overview of Monitor_Send DLL configuration according toone exemplary implementation of the present invention. The functionsincluded in the Monitor_Send DLL package, as shown in FIG. 7, aredescribed below:

change updateConfig(std::map<infoType, std::string>&)

This function updates the device information database of the currentrecord in the ODBC. This function keys on IP address and Unique ID forthe update purpose. This function is primarily used to add unique ID andto update the manufacturer and model if they are incorrectly assigned tothe device at the IP address for MonitorSend Package. If there is norecord with IP address and Unique ID, this function adds the passed datainto the database. If the Unique ID exists, but IP address is changed,it will update IP address. The return value change is enum {NoChange=0,UpDateRecord, AddRecord, ChangeIPaddress}.

bool getConfig(std::map<infoType, std::string>&)

This function obtains the map from ODBC for the device information inthe given format. The function returns true if there is data returned,false if there is no more data.

bool saveStatus(std::map<infoType, std::string>&)

This function saves the status information into the ODBC. The functionreturns true when saving is successful, false otherwise.

bool checkManufacturer(std::string&)

This function checks the passed manufacturer to be correct for the IPaddress. If the Manufacturer is correct, the function returns true,otherwise, it returns false and returns the correct manufacturer in thestring.

modelError checkModel(std::string&)

This function checks the passed model to be correct for the IP address.ModelError is enum type with {ModelNoError=0, WrongModel,ModelInformationUnavailable}. If WrongModel is detected, the correctmodel name is put in the returned string.

CAbsDevice*createDevice (std::string & in_sIP, CSNMP & in_SNMP,std::string & in_sManufacturer, std::string & in_sModel)

This function creates the device of the specification in the DeviceFactory. The function returns the pointer to the created device if thecreation is successful, 0 otherwise. The last two parameters has nullstrings as defaults.

bool getUniqueID (std::string & out_sID)

This function returns the unique ID from device. The function returnstrue if the Unique ID is returned, false otherwise.

bool getStatus (std::map<infoType, std::string>&)

This function obtains status information from a device. The functionreturns true when the status is returned, false when status could not beobtained. This function resets the variable that keeps the error statusbefore returning.

void checkErrorStatus (void)

This function triggers the device to check the error status to be savedinternally.

errorCode startSend (infoType)

This function triggers the Data Transfer to prepare for sending the dataspecified in the infoType. The function returns the errorCode.

errorCode dataSend (std::map<infoType, std::string>&)

This function in the Data Transfer sends the received data to theappropriate destination after properly formatting, encrypting andencoding. The function returns the errorCode.

errorCode endSend (void)

This function in the Data Transfer ends the data sending. The functionreturns the errorCode.

FIG. 8 shows the MonitorSend Intialization Sequence, as implemented inthis exemplary architecture.

FIG. 9 shows the Sending Configuration Sequence, as implemented in thisexemplary architecture.

FIG. 10 shows the Sending Status Sequence, as implemented in thisexemplary architecture.

FIG. 11 shows an overview of ReceiveStore DLL configuration according toone exemplary implementation of the present invention. The functionsincluded in the ReceiveStore DLL package, as shown in FIG. 11, aredescribed below:

bool getInformationType(infoType &)

This function triggers the DataRetriever to try to obtain the POP3 dataand determines the data type of the obtained email. The function returnstrue when the e-mail is obtained, false when no more e-mail is in POP3server at the time.

bool getInformation(std::map<infoType, std::string>&)

This function retrieves from DataRetriever the information content ofthe e-mail. The function returns true when the information is returned,false when no more data set is available in the email message.

change updateConfig(std::map<infoType, std::string>&)

This function updates the device information database of the currentrecord in the ODBC. This function keys on IP address and Unique ID forthe update purpose. This function is primarily used to add unique ID andto update the manufacturer and model if they are incorrectly assigned tothe device at the IP address for ReceiveStore Package. If there is norecord with IP address and Unique ID, this function adds the passed datainto the database. If the Unique ID exists, but IP address is changed,it will update IP address. The return value change is enum {NoChange=0,UpDateRecord, AddRecord, ChangeIPaddress}.

bool saveStatus(std::map<infoType, std::string>&)

This function saves the status information into the ODBC. The functionreturns true when saving is successful, false otherwise.

Table 1 shows the data structure and how it reflects the informationregarding one monitored device. The data structure contains the e-mailaddress of the contact person in addition to the telephone number. Thisdata structure is not used currently. However, this structure reflectsthe database structure. TABLE 1 Type Name Description std::stringm_sManufacturer A string representing the manufacturer of the networkprinter. std::string m_sModel A string representing the model of thenetwork printer. std::string m_sUniqueID A string representing theUnique ID of the network printer. This ID may be a serial number or MACAddress or any unique ID obtainable from the network printer.std::string m_sIPAddress A string representing the IP Address of thenetwork printer. std::string m_sCompanyName A string representing thename of the company which owns the network printer. std::stringm_sStreet A string representing the street address of the company.std::string m_sCity A string representing the city where the company islocated. std::string m_sState A string representing the state where thecompany is located. std::string m_sZipCode A string representing the zipcode of the company. std::string m_sLocation A string representing thelocation of the network printer within the company. std::stringm_sContactPerson A string representing the name of the contact personresponsible for the network printer. std::string m_sPhoneNumber A stringrepresenting the phone number of the contact person. std::stringm_sEMailAddress A string representing the e-mail address of the contactperson.

The following section describes the major enum types used in the system.

infoType

This section describes the definition of the infoType enum at thiswriting. As the project progresses, more infoType values can be added.The value range 0 through 99 is assigned to the data type. The valuerange 100 to 499 is assigned to Device Information. The value range 500to 999 is assigned to the common parameters and standard MIB parameters.The range 1000 to 2999 is assigned to Ricoh specific information. Therange 3000 to 3999 is assigned to Xerox. The range 4000 to 4999 isassigned to Lexmark. The range 5000 to 5999 is assigned to EPSON. Therange 6000 to 6999 is assigned to HP. The values are defined as follows:enum infoType {NotDefine=0, DeviceInformation, StatusInformation,Manufacturer=100, Model, UniqueID, IPAddress, CompanyName, Street, City,State, ZipCode, Location, ContactPerson, PhoneNumber, EMailAddress,DateTime=500, HrDeviceErrors, LowPaper, NoPaper, LowToner, NoToner,DoorOpen, Jammed, Offline, ServiceRequested, PrtGeneralConfigChanges,PrtLifeCount, PrtAlertDesc1, PrtAlertDesc2, PrtAlertDesc3,PrtAlertDesc4, PrtAlertDesc5, RicohEngineCounterTotal=1000,RicohEngineCounterPrinter, RicohEngineCounterFax,RicohEngineCounterCopier, XeroxYellowTonerCartridge=3000,XeroxMagentaTonerCartridge, XeroxCyanTonerCartridge,XeroxBlackTonerCartridge, XeroxPrinterCartridge}.

errorCode

This section describes the error codes defined at this writing. As theproject progresses, more error codes can be added. The range 0-99 isreserved. The range 100-199 is for SMTP, 200-299 is for POP3 and 300-399is for Socket. The other range shall be defined if needed. enumerrorCode(NoError=0, UnknownError=1, SendHelloCommandFailed=100,SendMailCommandFailed, SendRcptCommandFailed, SendDataCommandFailed,SendDataFailed, SendQuitCommandFailed, SendUserCommandFailed=200,SendPassCommandFailed, SendStatCommandFailed, SendRetrCommandFailed,SendDeleCommandFailed, SendQuitPop3CommandFailed,CreateSocketFailed=300, ConnectSocketFailed)).

Send Interface Manager Package illustrated in the FIG. 7 has one classthat manages all operations of the system. The classCSendInterfaceManager contains the public and private functions shown inthe Table 2. TABLE 2 Public and Private Functions ofCSendInterfaceManager Functions Descriptions PublicCsendInterfaceManager( ) Constructor ˜CsendInterfaceManager( )Destructor int initMonitorSendDLL(void) Initialization Function. Createsall the device objects that will communicate with all the devices thatare monitored. int sendConfig(void); Send the Configuration of thedevices via email. int monitorStatus(int in_nAction) Either monitorstatus or monitor status of the devices and send the collected data viaemail according to the in_nAction. int endDLL( ) End the monitor.Private void convertToAllUpper(std::string & Convert the characters inthe string to inOut_sString) upper case. voidsetManufacturerAndModels(void) This function gets manufacturer andmodels information from m_FactoryInterface and put them intom_ManufacturerAndModelMap. This function determines which manufacturerand model are supported by this system.

Table 3 shows the attributes of the CSendInterfaceManager class that areused in the above functions. TABLE 3 Attributes of CSendInterfaceManagerType Attribute Name Description CODBC* m_pODBC This attribute is used toaccess Database. The pointer is created in the constructor and destroyedin endDLL. CFactoryInterface m_FactoryInterface This attribute is usedto create device objects. CDataTransfer m_DataTransfer This attribute isused to send the information via email. CSNMP m_SNMP This attributeimplements the SNMP protocol with the devices.std::vector<std::auto_ptr<CAbsDevice> > m_DeviceVector This atrributekeeps the created device objects and uses them to obtain statusinformation about the devices. Std::map<std::string,m_ManufacturerAndModel This attribute keeps the manufacturerstd::vector<std::string> > Map and models. Strings are converted to allupper case.

All except the last two attributes are interface objects from thepackages that interact with Send Interface Manager package in FIG. 7.

FIG. 12 illustrates an exemplary class structure of the DeviceFactoryPackage (Module). The CFactoryInterface (1300) class is the interfacefor the DeviceFactory Package. It provides the interface function forcreating the device object that represents the device. The device objectis used to communicate with the device so that information can beobtained from the device. The CAbsFactory (1310) class is an abstractclass that provides the virtual interface function to create the deviceobject. CAbsFactory (1310) class does not provide the method forcreating the device object. The classes derived from CAbsFactory (1310)class provide the actual function to create the device object. Thus theclasses derived from CAbsFactory (1310) are CRicohFactory (1330),CXeroxFactory (1350), CLexmarkFactory (1320), and CGenericFactory(1340). Each of these derived factory classes can create a device objectcorresponding to the manufacturer of the device. For example,CRicohFactory (1330) can create a device object CRicohDevice (1430) asshown in FIG. 13. Each of the factory classes corresponding to themanufacturer contains factory classes derived from CAbsFactory (1310)corresponding to the actual model of the device. For example,CRicohFactory (1330) contains the classes CRicohAP2600NFactory (1332)and CRicohAficio120Factory (1334). The factory classes corresponding tothe models create device objects for the models. The CFactoryInterface(1300) receives an instruction to create a device object fromCSendInterfaceManager class. The CSendInterfaceManager class passesinformation into the function of CFactoryInterface (1300) about whatdevice object to create. Then CFactoryInterface (1300) calls theappropriate function of the abstract class CAbsFactory (1310). Theabstract class CAbsFactory (1310) defines two interface functions to bedefined in the derived class. Table 4 shows the public functions ofCAbsFactory (1310). TABLE 4 Public Functions of CAbsFactory (1310)Function Name Description CAbsFactory( ) Constructor virtual˜CAbsFactory( ) Virtual Destructor virtual CAbsDevice *createDevice(std::string & in_sIP, Function to create device object fromthe CSNMP & in_SNMP, std::string & in_sManufacturer, input parameters.The function is not std::string & in_sModel)=0; defined in this class.Derived classes must define this function. virtual voidgetManufacturerAndModel(std::string & Function to get the Manufacturername out_sManufacturer, std::vector<std::string> & and vector ofsupported models. The out_ModelVector)=0; function is not defined in theclass. Derived classes must define this function.

The CFactoryInterface (1300) class checks the manufacturer for which itneeds to create a device object and calls the appropriate manufacturerfactory (i.e. CRicohFactory (1330), CXeroxFactory (1350), orCLexmarkFactory (1320)) to create the device object. If no manufactureris recognized (i.e. HP or Canon), it will call a function of the classCGenericFactory (1340) that will create a device object that can be usedto communicate with the device of any manufacturer. CGenericFactory(1340) will create a device object CCommonPrinterDevice (1410)illustrated in FIG. 13. CCommonPrinterDevice (1410) is a device objectthat can be used to communicate with a device of any manufacturer toobtain information about that device.

CLexmarkFactory (1320), CRicohFactory (1330), and CXeroxFactory (1350)create the devices of CLexmarkDevice (1420), CRicohDevice (1430), andCXeroxDevice (1440) illustrated in FIG. 13, respectively. The deviceobjects for these classes can provide more information about the devicethan a device object of CCommonPrinterDevice (1410). These deviceobjects will communicate with the device to obtain manufacturer specificinformation. For example, a device object of CLexmarkDevice (1420) canbe used to obtain information associated with the manufacturer ofLexmark.

CLexmarkOptraT616Factory (1322), CRicohAP2600NFactory (1332),CRicohAficio120Factory (1334), CXeroxNC60Factory (1352) andCXeroxN4025Factory create the devices of CLexmarkOptraT616Device (1422),CRicohAP2600NDevice (1432), CRicohAficio120Device (1434),CXeroxNC60Device (1442) and CXeroxN4025Device (1444) illustrated in FIG.13. The device objects for these classes can provide even moreinformation about the device than the device objects of itscorresponding manufacturer device objects. These device objects willcommunicate with the device to obtain manufacturer and model specificinformation. For example, a device object of CLexmarkOptraT616Device(1422) can be used to obtain information associated with themanufacturer of Lexmark and the model of Optra T616.

FIG. 13 illustrates an exemplary class structure of the Device Package(Module). The CAbsDevice (1400) class contains 13 public functions thatare used by other L packages (modules), three of which are pure virtualfunctions (assigned to 0). The CAbsDevice (1400) class is an abstractclass that provides the virtual interface functions to obtaininformation about the device. CAbsDevice (1400) class does not providethe method for obtaining the information. The classes derived fromCAbsDevice (1400) class provide the actual function to obtain theinformation. CCommonPrinterDevice (1410) is a class derived fromCAbsDevice (1400). CCommonPrinterDevice (1410) represents a deviceobject that can be used to communicate with a device of any manufacturerto obtain information about that device. CCommonPrinterDevice (1410) canbe used to obtain information that is common to all devices.CLexmarkDevice (1420), CRicohDevice (1430), and CXeroxDevice (1440) areall classes derived from CCommonPrinterDevice (1410). CLexmarkDevice(1420), CRicohDevice (1430), and CXeroxDevice (1440) represent deviceobjects that can be used to communicate with devices of themanufacturers Lexmark, Ricoh, and Xerox, respectively, to obtainmanufacturer specific information about the devices. SinceCLexmarkDevice (1420), CRicohDevice (1430), and CXeroxDevice (1440) arederived from CCommonPrinterDevice (1410), they can also obtaininformation that is common to all devices. CLexmarkOptraT616Device(1422) is a class derived from CLexmarkDevice (1420),CRicohAP2600NDevice (1432) and CRicohAficio120Device (1434) are classesderived from CRicohDevice (1430), and CXeroxNC60Device (1442) andCXeroxN4025Device (1444) are classes derived from CXeroxDevice (1440).These derived classes represent device objects that can be used tocommunicate with devices of the models to obtain model specificinformation about the device. Since these classes are derived from themanufacturer specific device classes, they can also obtain informationthat is manufacturer specific and information that is common to alldevices.

Table 5 shows the public functions of CAbsDevice (1400). TABLE 5Functions Description CAbsDevice(std::string in_sIPaddress, CSNMP &in_SNMP) Constructor with parameters to initialize the attributesvirtual ˜CAbsDevice( ) Destructor virtual bool getUniqueId(std::string &out_sID)=0 Virtual function to get unique ID virtual boolgetStatus(std::map<infoType, std::string> & Virtual function to getstatus out_StatusInformation )=0 information virtual voidcheckErrorStatus(void)=0 Virtual function to check the error status voidsetUniqueIDValue(std::string in_sIDValue) Set the unique ID of thedevice. std::string getUniqueIDValue(void) Get the unique ID of thedevice CSNMP & getSNMP(void) Get the reference to SNMP objectstd::string & getIPaddress(void) Get the reference to the IP address ofthe device void setErrorByte(char in_cError) Set the Error Byte codechar getErrorByte(void) Get the Error Byte code bool setAgent(void)Starts the SNMP agent at the IP address std::stringgetStringValueForOID(std::string in_sOID) Return the string value foundby GetNext SNMP command for the passed Object Identifier (OID)std::string getStringValueForOID(void) Return the string value found bythe GetNext Command of SNMP bool closeAgent(void) Closes the connectionof SNMP

This abstract class also contains the attributes common among all thedevices.

Table 6 shows the attributes of the CAbsDevice (1400) class. TABLE 6Type Attribute Name Description std::string m_sIPAddress This attributeis IP address to be used for SNMP. CSNMP & m_SNMP This attribute is SNMPobject through which connection to the actual device is establishedstd::string m_sUniqueID This attribute is the unique ID for the device.char m_cError This attribute is to keep the error bits.

FIGS. 14A through 14D is a flowchart that shows the exemplaryinitialization process when executing the initMonitorSendDLL( ) functionof CSendInterfaceManager. The flowchart shows the C++ code used toimplement this function. Steps 1503 and 1506 initialize the localvariables used in the initialization. In step 1509, the configurationinformation about a device is obtained from the database. Theconfiguration information is stored in a map structure. Theconfiguration information of a device includes the manufacturer, model,and IP address of the device. If the configuration information cannot beobtained from the database, then go to step 1587. Step 1587 will bediscussed later. In steps 1512 and 1515, using the IP address of thedevice, make an SNMP connection to the device. If the connection fails,then set error status of the initialization to SomeDeviceCreationErrorin step 1518 and get the configuration information for the next devicein the database in step 1509. If the connection is successful, check themanufacturer of the device using the SNMP connection in steps 1521 and1524. In step 1527 if the SNMP connection is unable to obtain themanufacturer name of the device, then get the configuration informationfor the next device in the database in step 1509. If the manufacturername of the device can be obtained, then in steps 1530 and 1533 verifythat the manufacturer is supported by the system and set themanufacturer name in the map containing the configuration information.

In steps 1536 and 1539 of FIG. 14B, check the model of the device usingthe SNMP connection. In step 1542 if the SNMP connection is unable toobtain the model name of the device, then go to step 1557. Step 1557will be discussed later. If the model name of the device can beobtained, then in steps 1545 and 1548 check if the manufacturer obtainedpreviously is supported by the system. If the manufacturer is notsupported by the system, then set the model name in the map containingthe configuration information in step 1551. If the manufacturer obtainedpreviously is supported by the system, then verify that the model issupported by the system and set the model name in the map containing theconfiguration information in step 1554. With the information about theIP address, manufacturer, and model of the device, create the deviceobject for the device in step 1557.

Step 1560 of FIG. 14C checks if the device object has been created forthe device. If the device object cannot be create for the device, thenset the error status of the initialization to SomeDeviceCreationError instep 1563 and go to step 1581. Step 1581 will be discussed later. If thedevice object can be created for the device, then obtain the uniqueidentification for the device in step 1566. If the unique identificationcannot be obtained then set the error status of the initialization toUnKnownError in step 1569 and go to step 1581. If the uniqueidentification can be obtained, then in steps 1572, 1575, and 1578 setthe unique identification in the map containing the configurationinformation and update the configuration information in the database forthe device. In step 1581, close the SNMP connection to the device. Instep 1584, clear the map that contains configuration information aboutthe device and get the configuration information for the next device inthe database in step 1509.

In step 1586 of FIG. 14D, the system checks to see if any device objecthas been created. If device objects have been created, then theinitialization is completed in step 1590. If no device objects have beencreated, then the error status of the initialization is set toNoDeviceCreated and the initialization is completed in steps 1593 and1597.

In step 1566, the system tries to get the unique identifier from thedevice through the virtual function getUniqueID of CAbsDevice (1400). Alocal string value is passed into the function to obtain the uniqueidentifier from the device. If this function fails to get the uniqueidentifier, the system continues to step 1569. Without the uniqueidentifier, the system cannot keep this device object to communicatewith the device to obtain information about the device. If this functionobtains the unique identifier, the unique identifier is stored in themap containing the configuration information in step 1572.

As shown in Table 5, the function getUniqueID is not defined in theabstract class CAbsDevice (1400). However, the classes which are derivedfrom CAbsDevice (1400) from 1410 through 1444 in FIG. 13 define thefunction getUniqueID. In CCommonPrinterDevice (1410), the functiongetUniqueID uses two other public functions defined inCCommonPrinterDevice to obtain the unique identifier: getMACaddress andgenerateUniqueId. getUniqueID will call getMACaddress first to obtainthe unique identifier. getMACaddress returns the MAC address of thedevice using SNMP. An SNMP Get command with the object identifier of“1.3.6.1.2.1.25.3.5.1.2” is used to obtain the MAC address from thedevice. If the MAC address can be obtained, then it will be used for theunique identifier of the device. If the MAC address cannot be obtained,then getUniqueID will call generateUniqueId to obtain the uniqueidentifier. generateUniqueId returns a unique number. generateUniqueIduses a random number generator with time as a seed to generate a uniquenumber. The unique number will be used as the unique identifier.

For the manufacturer device classes and the various model deviceclasses, the getUniqueID function is defined in the manufacturer'sclass. For example, in the case of CRicohDevice (1430),CRicohAP2600NDevice (1432), and CRicohAficio120Device (1434), thegetUniqueID function is defined in the class CRicohDevice (1430).CRicohAP2600NDevice (1432) and CRicohAficio120Device (1434) are derivedfrom CRicohDevice (1430) so they can use the function of their superclass. This is true for CLexmarkDevice (1420) and CXeroxDevice (1440)classes and their derived classes. In the manufacturer's class, thegetUniqueID function first send an SNMP command to get a unique valuefrom the device using the manufacturer's unique object identifier. Theunique value obtained from the device for a manufacturer will be theunique identifier. The unique value can be the serial number of thedevice. For example, the object identifier used to access the serialnumber for a Xerox device is “1.3.6.1.4.1.253.8.53.3.2.1.3”. IfgetUniqueID of the manufacturer's device class returns a uniqueidentifier, then it will be used as the unique identifier of the deviceobject. If getUniqueID of the manufacturer's device class does notreturn a unique identifier, then the getUniqueID function ofCCommonPrinterDevice (1410) is used to obtain the unique identifier(i.e. MAC address first and then random number).

As described from the previous paragraphs, the method for obtaining theunique identifier for a device uses these following steps: (1) usemanufacturer specific information and communication to obtain the uniqueidentifier (i.e. serial number), (2) use information and communicationcommon to all manufacturers to obtain the unique identifier (i.e. MACaddress), and (3) generate unique identifier using a random numbergenerator. Step 1 is always done first and if it fails, step 2 isperformed. If step 2 fails, step 3 is performed.

FIG. 15 shows a flowchart of how a device object is created by thecreateDevice function of CFactoryInterface. Table 7 shows the attributesof the class. TABLE 7 Type Attribute Name Descriptionstd::map<std::string, M_FactoryMap This attribute keeps all thestd::auto_ptr< Manufacturer Factory. CAbsFactory> >std::map<std::string, m_FactoryMapIterator This attribute is thestd::auto_ptr< iterator of the map CAbsFactory> >::iterator boolm_bFirstGet This attribute is used to set the iterator to the firstposition

-   -   m_FactoryMap is a map structure with the key corresponding to        the manufacturer's name and the value corresponding to the auto        pointer to the corresponding manufacturer's device factory        object. For example, m_FactoryMap may have the key “Xerox” and        the corresponding value is an auto pointer to CXeroxFactory.        m_FactoryMap is initialized in the constructor of        CFactoryInterface.

In step 1603, the input parameter for the manufacturer in functioncreateDevice of CFactoryInterface is used to see if it supported by thesystem. This is done by using the find function of m_FactoryMap to seeif the inputted manufacturer matches any of the keys in the map. The C++map template contains a find function that returns an iterator of themap pointing to the entry in the map corresponding to the key that isbeing searched. In step 1606 the system determines if the manufactureris supported by checking if the returned iterator from the find functionis at the end of the map. If the manufacturer is not supported (iteratoris the end of the map), the auto pointer to the CGenericFactory objectcorresponding to the key “GENERIC” is used to create the device objectin step 1612. The createDevice function of CGenericFactory returns adevice object and completes the function createDevice ofCFactoryInterface in step 1615. If the manufacturer is supported(iterator is not the end of the map), the auto pointer to themanufacturer factory object corresponding to the manufacturer is used tocreate the device object in step 1609. For example, if the manufactureris “RICOH”, then the createDevice function of CRicohFactory will becalled to create the device object. Step 1615 completes the functioncreateDevice of CFactoryInterface.

FIG. 16 shows the flowchart of how a device object, CRicohDevice,CRicohAP2600NDevice, or CRicohAficio120Device, is created by thecreateDevice function of CRicohFactory. The same attributes and processapply to CLexmarkFactory and CXeroxFactory. CRicohFactory has oneattribute as shown in Table 8. TABLE 8 Type Attribute Name DescriptionStd::map<std::string, m_FactoryMap This attribute isstd::auto_ptr<CAbsFactory> > used to map the names of the models and thecorresponding factories.

m_FactoryMap is a map structure with the key corresponding to themodel's name and the value corresponding to the auto pointer to thecorresponding model's device factory object. For example, m_FactoryMapmay have the key “AP2600N” and the corresponding value is an autopointer to CRicohAP2600NDevice. m_FactoryMap is initialized in theconstructor of CRicohFactory.

In step 1703, the input parameter for the model in function createDeviceof CRicohFactory is used to see if it supported by the system. This isdone by using the find function of m_FactoryMap to see if the inputtedmodel matches any of the keys in the map. In step 1706 the systemdetermines if the model is supported by checking if the returnediterator from the find function is at the end of the map. If the modelis not supported (iterator is the end of the map), a CRicohDevice objectis created in step 1712 and the createDevice of CFactoryInterface iscompleted in step 1715. If the model is supported (iterator is not theend of the map), the auto pointer to the model factory objectcorresponding to the model is used to create the device object in step1709. For example, if the model is “AFICIO 120”, then the createDevicefunction of CRicohAficio120Factory will be called to create the deviceobject. Step 1715 completes the function createDevice of CRicohFactory.

From the descriptions of FIGS. 15 and 16, the method for creating thedevice object for representing the device uses these following steps:(1) if the manufacturer and model is supported, create a device objectcorresponding to the manufacturer and model using the manufacturer andmodel factory object, (2) if the manufacturer is supported but the modelis not supported, create a device object corresponding to themanufacturer using the manufacturer factory object, and (3) if themanufacturer and model are not supported, create a device object thatcan represent a device of any manufacturer and model.

FIGS. 17A and 17B show the flowchart of the function, checkManufacturerof the CSNMP class that is used in step 1524 of FIG. 14A. The CSNMPclass has 8 public functions and 8 private functions along with oneprivate structure. The following is the private structure used in theCSNMP class. struct ManufacturerAndModelInfo {   std::stringm_sManufacturer;   std::string m_sEnterpriseOID;   std::stringm_sModelOID; };

Table 9 shows the public and private functions of CSNMP. TABLE 9Functions Descriptions Public CSNMP( ) Constructor ˜CSNMP( ) Destructorbool setAgent (std::string& in_sAgent) This function creates an SNMPsession for the input agent. This function returns true if an SNMPsession can be created for the agent. Otherwise false is returned. boolcheckManufacturer (std::string& This function checks if the inputinOut_sManufacturer) string for the manufacturer is correct for thecurrent agent. This function returns true if the manufacturer iscorrect. Otherwise false is returned with the correct manufacturer inthe string. modelError checkModel (std::string& This function checks ifthe input inOut_sModel) string for the model is correct for the currentagent. This function returns ModelNoError if the model is correct.Otherwise, WrongModel is returned with the correct model in the stringor ModelInformationUnavailable is returned with an empty string.std:string getNextStringValueForOID This function obtains the string(std::string in_sOID) value associated with the input object identifier.This function returns the string value associated with the OID if it canbe obtained. Otherwise an empty string is returned. std:stringgetNextStringValueForOID( ) This function obtains the next string valueassociated with the object identifier. This function returns the stringvalue associated with the next OID if it can be obtained. Otherwise anempty string is returned. bool closeAgent() This function closes theSNMP session for the current agent. This function returns true if theSNMP session can be closed. Otherwise false is returned. Private voidThis function initializes setManufacturerAndModelOIDVector ( )m_ManufacturerAndModelInfoVector with the ManufacturerAndModelInfostructure set with values. std::string getValueFromGetNextRequest Thisfunction obtains the value (std::string in_sOID) associated with theinput object identifier using the GETNEXT request of the SNMP protocol.This function returns a string value associated with the objectidentifier. If no value is associated with the OID, then an empty stringis returned. void getVarBindOID (std::string& This function obtains theobject out_sOID, AsnObjectIdentifier& identifier returned from thein_AsnOID) GETNEXT request of the SNMP protocol found in the variablebinding. This function returns string value for the object identifier.std::string intToString (int in_nNum) This function converts an intvalue to a string. std::string unsignedLongToString This functionconverts an unsigned (unsigned long in_nNum) long int value to a string.std::string byteStreamToString This function converts the BYTE(AsnOctetString& in_AsnOctetString) stream to a string. voidconvertToAllUpper (std::string& This function converts all the stringinOut_sString) characters to upper case.

Table 10 shows the attributes of CSNMP. TABLE 10 Type Attribute NameDescription CSnmpSession m_SnmpSession This attribute member representsan SNMP session. std::string m_sCurrentOID This attribute memberrepresents the current object identifier. std::string m_sNextOID Thisattribute member represents the object identifier obtained from the GETNEXT request of SNMP that will be used to get the next value associatedwith the OID. std::vector<Manufacturer m_ManufacturerAndModel Thisattribute member contains AndModelInfo> InfoVector information about theobject identifiers used to identify the manufacturer and model of thenetwork printer. std::string m_sCurrentModelOID This attribute memberrepresents the object identifier used to find information about themodel of the network printer.

The attribute m_ManufacturerAndModelInfoVector holds the data structurewhere the name of the manufacturer (m_sManufacturer), object identifierof the manufacturer (m_sEnterpriseOID), and object identifier for model(m_sModelOID) are stored. The object identifier of a manufacturer (alsocalled enterprise object identifier) is a unique object identifierassigned to a manufacturer that can be used to identify a manufacturer.The object identifier for model is an object identifier used by amanufacturer to access and store the information about the model of thedevice. As an example, the data structure may look as follow: {(“RICOH”,“1.3.6.1.4.1.367”, “1.3.6.1.4.1.367.3.2.1.1.1.1”), (“XEROX”,“1.3.6.1.4.1.253”, “1.3.6.1.4.1.253.8.53.3.2.1.2”), (“LEXMARK”,“1.3.6.1.4.1.641”, “1.3.6.1.4.1.641.1.4.3”)).m_ManufacturerAndModelInfoVector is initialized in the constructor ofCSNMP.

In step 1803, the input parameter (inOut_sManufacturer) of the functioncheckManufacturer of CSNMP is stored into a local string variable,loc_sManufacturer. In step 1806, all the input characters are convertedto upper case. In step 1809, the SNMP GET command is issued to obtainthe manufacturer's object identifier (enterprise object identifier) fromthe device. In step 1812, the contents of the value returned,loc_sReturn, is checked to see if the manufacturer's object identifierwas obtained from the device. If the value returned is empty in step1812, then the manufacturer's object identifier was not obtained. If themanufacturer's object identifier was not obtained, then proceed to step1842 in FIG. 17B. Step 1842 will be discussed later. If themanufacturer's object identifier was obtained, then the manufacturer'sobject identifier member of the struct ManufacturerAndModelInfo inm_ManufacturerAndModelInfoVector is checked to see if it is found in thereturned value in step 1818. This step checks if the manufacturer of thedevice is supported by the system by matching the manufacturer's objectidentifier obtained with the object identifiers of the manufacturerssupported by the system. If the manufacturer's object identifier cannotbe found in m_ManufacturerAndModelInfoVector, then proceed to step 1842in FIG. 17B. If the manufacturer's object identifier can be found inm_ManufacturerAndModelInfoVector, then the ManufacturerAndModelInfostructure corresponding to the manufacturer's object identifier is usedto perform the next two steps: (1) assign the object identifier formodel (m_sModelOID) member to the attribute m_sCurrentModelOID in step1827 and (2) assign the name of the manufacturer (m_sManufacturer)member to the parameter in Out_sManufacturer in step 1830.m_sCurrentModelOID is used in FIGS. 18A and 18B to determine the modelname of device. In step 1833, the original manufacturer name from theinput parameter, loc_sManufacturer, and the actual manufacturer nameobtained from the device, in Out_sManufacturer, are compared to see ifthey are the same. If they are the same, then true is returned in step1836. If they are not the same, then false is returned in step 1836. Instep 1842, the SNMP GET command is issued to obtain the systemdescription of the device and the system description toinOut_sManufacturer. Also, m_sCurrentModelOID is set to an empty string.The system returns false in step 1845.

FIGS. 18A and 18B show the flowchart of the function checkModel of theCSNMP class that is used in step 1539 of FIG. 14B. In step 1903, theinput parameter (inOut_sModel) of checkModel is stored into a localstring variable, loc_sModel. In step 1906, all the input characters areconverted to upper case. In step 1912, m_sCurrentModelOID is checked tosee if it is an empty string. m_sCurrentModelOID is the objectidentifier that is used to obtain the model name from the device viaSNMP. If m_sCurrentModelOID is not an empty string, then proceed to step1956. Step 1956 will be discussed later. If m_sCurrentModelOID is anempty string, then call the function checkManufacturer in step 1918.checkManufacturer is described in FIGS. 17A and 17B. This function mayassign a value to m_sCurrentModelOID. In step 1921, m_sCurrentModelOIDis checked again to see if it is an empty string. If m_sCurrentModelOIDis not an empty string, then proceed to step 1956. If m_sCurrentModelOIDis still an empty string, then the SNMP GET command is issued to obtainthe system description of the device in step 1927 and the systemdescription is assigned to inOut_sModel in step 1930. The systemdescription obtained from the SNMP GET command is checked to see if itis an empty string in step 1933. If it is an empty string, thencheckModel returns the status ModelInformationUnavailable in step 1936.If it is not an empty string, the characters of the system descriptionare converted to upper case in step 1939. In step 1942, check if theoriginal model name from the input parameter, loc_sModel, is found inthe system description. If the original model name cannot be found inthe system description, then checkModel returns the status WrongModel instep 1951. If the original model name can be found in the systemdescription, then assign the original model name from the inputparameter, loc_sModel, to inOut_sModel in step 1945 and checkModelreturns the status ModelNoError in step 1948.

In step 1956 of FIG. 18B, the SNMP GET command is issued using theobject identifier of m_sCurrentModelOID to obtain the model name fromthe device. In step 1958, set m_sCurrentModelOID to an empty string sothat other models can be tested. In step 1960, the model name obtainedis checked to see if it is an empty string. If the model name is anempty string, then proceed to step 1974. Step 1974 will be discussedlater. If the model name is not an empty string, then the model name isassigned to inOut_sModel in step 1962. In step 1964, all the charactersof the model name is converted to upper cases. In step 1966, check ifthe original model name from the input parameter, loc_sModel, is foundin the model name obtained from the device. If the original model namecannot be found in the model name obtained from the device, thencheckModel returns the status WrongModel in step 1972. If the originalmodel name can be found in the model name obtained from the device, thenassign the original model name from the input parameter, loc_sModel, toinOut_sModel in step 1968 and checkModel returns the status ModelNoErrorin step 1970.

Steps 1974 to 1990 follow the same steps as steps 1927 to 1951.

From the descriptions of FIG. 17A, 17B, 18A, and 18B, the method forverifying the manufacturer and model of the device uses these followingsteps: (1) obtain the enterprise object identifier from the device viaSNMP and determine the manufacturer name based on the enterprise objectidentifier and compare it with the assumed manufacturer name, (2) if theenterprise object identifier cannot be obtained, obtain the systemdescription and check if the assumed manufacturer name is in the systemdescription, (3) obtain the model name of the device via SNMP using theobject identifier that will identify the model for a manufacturer of thedevice and compare it with the assumed model name, and (4) if the modelname cannot be obtained, obtain the system description and check if theassumed model name is in the system description. The assumedmanufacturer name and assumed model name that the system has for thedevices are verified with the names obtained from the device.

The Data Transfer Package is responsible for sending the informationabout the monitored device from the remote monitoring workstation to thecentral monitoring workstation. This package creates the email messagethat contains the information about the monitored device. The classCMailMessage contains the contents of the email message that is sentthat includes the monitored information in the attachment of the emailmessage. The public and private functions of CMailMessage are shown inTable 11. TABLE 11 Function Name Description Public CMailMessage( )Constructor ˜CMailMessage( ) Destructor void resetMailMessage( ) Resetsthe attributes of CMailMessage void initializeMailMessage( ) Initializesthe header of the email message bool addToMessage(std::stringin_sMessage) Adds input string (information of the monitored devices) toMIME attachment void completeMailMessage( ) Adds the end of mail to theemail message bool getNextLineOfMailMessage(std::string& Gets a line ofthe email message out_sLineOfMailMessage) time_t getDateAndTime( ) Getsthe date of the email message Private void setHeaderInfo( ) Gets theinformation used for the header of the email message voidsetVerification( ) Implements the verification scheme in the emailmessage CAbsEncrypter* createEncrypter(EncrypterType Creates theencrypter used for the in_EncrypterType) verification scheme and for theencryption of the MIME attachment

Table 12 below shows the attributes of the CMailMessage class that areused in the above functions. TABLE 12 Type Attribute Name Descriptionstd::string m_sFromAddr This attribute member represents a string forthe source address used in the From field of the mail header.std::string m_sRcptAddrs This attribute member represents a string forthe recipient addresses used in the To field of the mail header.std::string m_sDate This attribute member represents a string for thedate field of the mail header. std::string m_sSubject This attributemember represents a string for the subject field of the mail header.std::string m_sComment This attribute member represents a string for thecomment field of the mail header. This field is used for verificationpurposes. std::string m_sBoundary This attribute member represents astring for the boundary of the MIME attachment. std::string m_sFilenameThis attribute member represents the filename for the MIME attachment.time_t m_DateAndTime This attribute member represents the time in whichthe mail message was initialized. std::string m_sEncodedString Thisattribute member represents the encoded string to be placed in the mailmessage. std::vector<std::string> m_MailMessage This attribute memberrepresents the lines of the mail message.std::vector<std::string>::iterator m_MailMessageIterator This attributemember represents the iterator for vector m_MailMessage. Boolm_bGotFirstLine This attribute member determines if the first line ofthe mail message has been obtained. std::auto_ptr <CabsEncrypter>m_pEncrypter This attribute member encrypts the data. This encrypter isused for the verification scheme and to encrypt the information of themonitored devices. CBase64Encoder m_Base64Encoder This attribute memberBase64 encodes the data to be added to the MIME attachmentCSendSystemRegistry m_SendSystemRegistry This attribute memberrepresents the system registry where information needed to create themail message is stored.

The strings m_sFromAddr, m_sRcptAddrs, m_sDate, m_sSubject, m_sComment,m_sBoundary, and m_sFilename are used for the header of the emailmessage. The vector m_MailMessage is used for the email message.

The CSimpleEncrypter class is responsible for encrypting the informationbefore it is placed into the email message. Table 13 illustrates thepublic functions of CSimpleEncrypter and Table 14 below shows theattributes of the CSimpleEncrypter class that are used by the functions.TABLE 13 Function Name Description CSimpleEncrypter( ) Constructor˜CSimpleEncrypter( ) Destructor bool encryptData(std::string&inOut_sData) This function encrypts the input string. The input stringwill be modified to contain the encrypted string. void resetEncrypter( )Resets the attributes of CSimpleEncrypter

TABLE 14 Type Attribute Name Description int m_nCurrent This attributemember represents the current modifier in the simple encryption scheme.Its value is added to each character of the string. int m_nIncrementThis attribute member represents the increment size in the simpleencryption scheme. Its value is added to m_nCurrent after m_nCurrent isadded to a character. int m_nPeriod This attribute member represents theperiod in the simple encryption scheme. Its value is assigned tom_nCurrent if m_nCurrent higher than 255 or lower than −255.

The CBase64Encoder class is responsible for base64 encoding theencrypted information before it is placed into the email message. Table15 below shows the public functions of CBase64Encoder and Table 16 belowshows the attributes of the CBase64Encoder class that are used by thefunctions. TABLE 15 Function Name Description CBase64Encoder(intConstructor. The input parameter in_nMaxLength = determines the maximumDefaultMaxLength) length of the encoded string. ˜CBase64Encoder( )Destructor bool encodeData(bool& This function base64 encodes aout_bIsLineOfDataReady, character and adds it to the encoded unsignedchar in_cDataToEncode) string m_sEncodedString. out_bIsLineOfDataReadyis set to true when m_sEncodedString reaches it's length ofm_nMaxLength. std::string getEncodedString( ) This function returns theencoded string.

TABLE 16 Type Attribute Name Description std::string m_sEncodedStringThis attribute member represents the base64 encoded string. intm_nStringSize This attribute member maintains the size of the stringm_sEncodedString. int m_nMaxLength This attribute member represents themaximum size of the string m_sEncodedString. Unsigned intm_nUnencodedBits This attribute member contains the bits of the datathat remains unencoded. EncodeState m_EncodeState This attribute memberrepresents the state for encoding the data.

The base64 encoding is described in RFC 2045 “Multipurpose Internet MailExtensions (MIME) Part One: Format of Internet Message Bodies”.

FIG. 19 shows the class diagram of the Data Transfer Package. TheCDataTransfer 2000 class is the interface for this package to send thedata using SMTP. CDataTransfer 2000 formats the information about themonitored devices before it is sent. The CSendManager 2004 class createsthe email message and sends the message using SMTP. The CSmtp 2006 classimplements the SMTP protocol. CSmtp uses the CSocket 2022 class of theMicrosoft Foundation Class library (MFC) to implement the SMTP protocol.The CMailMessage 2008 class creates the various components of the emailmessage. CMailMessage 2008 implements the verification scheme for emailmessage. CMailMessage 2008 adds the encrypted and base 64 encoded datato the MIME attachment of the email message. The CAbsEncrypter 2012class is an abstract class that provides the virtual interface functionto encrypt the data that will be placed into the email message. TheCNullEncrypter 2014 class is derived from CAbsEncrypter 2012 andprovides a method for encrypting the data. CNullEncrypter 2014 does notperform any encryption on the data. The CSimpleEncrypter 2016 class isderived from CAbsEncrypter 2012 and performs a simple method forencrypting the data. The CBase64Encoder 2010 class performs the Base64encoding of the data. The CSendSystemRegistry 2018 class is derived fromthe base class CBaseSystemRegistry 2020 located in the Common package.CSendSystemRegistry 2018 provides this package with information from thesystem's registry necessary for creating and sending the email message.

FIG. 20 is a flowchart describing the resetEncrypter( ) function ofCSimpleEncrypter. This function resets the attribute members,m_nCurrent, m_nIncrement, and m_nPeriod, to their initial values. Instep S2602, m_nCurrent is assigned the value of the remainder ofBaseValue divided by 128. In step S2604, m_nPeriod is assigned the valueof the remainder of BaseValue divided by 128. In step S2606 m_nIncrementis assigned the value of the remainder of IncrementValue divided by 128.If the result for m_nPeriod is negative, then multiply m_nPeriod by −1in step S2610. The value of BaseValue and IncrementValue can vary sothat the simple encryption can vary. For example, if BaseValue is 20 andIncrementValue is 5, then m_nCurrent is 20, m_nPeriod is 20, andm_nIncrement is 5. If BaseValue is −34 and IncrementValue is 13, thenm_nCurrent is −34, m_nPeriod is 34, and m_nIncrement is 13. These twosets of value for BaseValue and IncrementValue will result in twodifferent encrypted strings for the same string that is to be encrypted.

FIG. 21A and FIG. 21B is a flowchart describing the encryptData( )function of CSimpleEncrypter. This function encrypts the input stringone character at a time. This function modifies the input string tocontain the encrypted string. The flowchart in FIG. 21B is acontinuation of the flowchart in FIG. 21A.

In step S2702 a local integer variable, loc_nTempChar, is declared.loc_nTempChar will be used to store a character from the input string.In step S2704 a local integer variable, loc_nEnd, is declared and isassigned the length of the input string. In step S2708 a local integervariable, loc_iIndex, is declared and set to 0. loc_iIndex is used as anindex to access each character in the string.

Steps S2710, S2712, and S2714 in FIG. 21A and S2722 through S2736 inFIG. 21B are repeated until each character in the string has beenencrypted. When the last character has been encrypted, step S2710 willresult in NO and the encryption will be completed in step S2720.

For each character the following steps are performed:

-   -   1. In step S2712 of FIG. 21A, the character in the string at        index loc_iIndex is assigned to the variable loc_nTempChar. The        character is converted into its integer ASCII code as it is        assigned to loc_nTempChar.    -   2. In step S2714 of FIG. 21A, the value of m_nCurrent is added        to loc_nTempChar. This is the encryption to the character of the        string.    -   3. In step S2722 of FIG. 21B, loc_nTempChar is checked to see if        it is less than 0.        -   a. If loc_nTempChar is less than 0, in step S2724 of FIG.            21B, 256 is added to loc_nTempChar.        -   b. If loc_nTempChar is not less than 0, in step S2726 of            FIG. 21B, loc_nTempChar is assigned the remainder of            loc_nTempChar divided by 256.    -   4. In step S2728 of FIG. 21B, the value of m_nIncrement is added        to loc_nTempChar.    -   5. In step S2730 of FIG. 21B, m_nCurrent is checked to see if it        is greater than 255 or less than −255.        -   a. If m_nCurrent is greater than 255 or less than −255, in            step S2732 of FIG. 21B, m_nCurrent is set to m_nPeriod.    -   6. In step S2734 of FIG. 21B, the integer value of loc_nTempChar        is converted to a character and the character is assigned to the        string at index loc_iIndex. The original character of the string        at index loc_iIndex is overwritten.    -   7. In step S2736 of FIG. 21B, increment the index loc_iIndex        by 1. It may be possible that the new encrypted string will        contain non-printable characters.

Table 17 and Table 18 below shows a sample of the simple encryptionmethod of FIG. 20, 21A, and 21B on the string “Help” using 30 for theBaseValue and 8 for the IncrementValue. Table 18 shows the values of theattribute members of CSimpleEncrypter for the execution of the stepsS2602, S2604, and S2606 of FIG. 20 of the resetEncrypter( ) function.Table 18 shows the values of the local variables, the attribute members,and the input output string for the execution of the steps of FIGS. 21Aand 21B of the encryptData( ) function. The resulting encrypted stringcontains non-printable characters. Since the string contains characters,the range of values that can be assigned to each character in the stringis −128 to 127. Therefore in step S2734, the integer value ofloc_nTempChar is converted into a value within this range. TABLE 17resetEncrypter( ) function of CSimpleEncrypter for BaseValue = 30 andIncrementValue = 8 Steps Attributes S2602 m_nCurrent = 30 S2604m_nPeriod = 30 S2606 m_nIncrement = 8

TABLE 18 encryptData( ) function of CSimpleEncrypter for the InputString “Help” Steps H e L P S2710 loc_iIndex = 0 loc_iIndex = 1loc_iIndex = 2 loc_iIndex = 3 S2712 loc_nTempChar = 72 loc_nTempChar =101 loc_nTempChar = 108 loc_nTempChar = 112 S2714 loc_nTempChar = 102loc_nTempChar = 139 loc_nTempChar = 154 loc_nTempChar = 166 S2724 S2726loc_nTempChar = 102 loc_nTempChar = 139 loc_nTempChar = 154loc_nTempChar = 166 S2728 m_nCurrent = 38 m_nCurrent = 46 m_nCurrent =54 m_nCurrent = 62 S2732 S2734 inOut_sData[0] = 102 inOut_sData[0] =−117 inOut_sData[0] = −102 inOut_sData[0] = −91 (‘f”) (non-printable(non-printable (non-printable character) character) character) S2736loc_iIndex = 1 loc_iIndex = 2 loc_iIndex = 3 loc_iIndex = 4

101861 Table 19 and Table 20 below shows a sample of the simpleencryption method of FIG. 20, 21A, and 21B on the same string “Help”using −75 for the BaseValue and −20 for the IncrementValue. Table 19shows the values of the attribute members of CSimpleEncrypter for theexecution of the steps of FIG. 20 of the resetEncrypter( ) function.Table 20 shows the values of the local variables, the attribute members,and the input output string for the execution of the steps of FIGS. 21Aand 21B of the encryptData( ) function. By comparing Table 18 and Table20, it can be seen that for different BaseValue and IncrementValue, thesimple encryption method results in different encrypted strings for thesame input string. By using different values for the BaseValue andIncrementValue, the resulting encrypted string will differ. Therefore,the BaseValue and IncrementValue can serve as keys to the encryptionscheme. TABLE 19 resetEncrypter( ) function of CSimpleEncrypter forBaseValue = −75 and IncrementValue = −20 Steps Attributes S2602m_nCurrent = −75 S2604 m_nPeriod = −75 S2606 m_nIncrement = −20 S2610m_nPeriod = 75

TABLE 20 encryptData( ) function of CsimpleEncrypter for the InputString “Help” Steps H e l p S2710 loc_iIndex = 0 loc_iIndex = 1loc_iIndex = 2 loc_iIndex = 3 S2712 loc_nTempChar = 72 loc_nTempChar =101 loc_nTempChar = 108 loc_nTempChar = 112 S2714 loc_nTempChar = −3loc_nTempChar = 6 loc_nTempChar = −7 loc_nTempChar = −23 S2724loc_nTempChar = 253 loc_nTempChar = 249 loc_nTempChar = 233 S2726loc_nTempChar = 6 S2728 m_nCurrent = −95 m_nCurrent = −115 m_nCurrent =−135 m_nCurrent = −155 S2732 S2734 inOut_sData[0] = −3 inOut_sData[0] =6 inOut_sData[0] = −7 inOut_sData[0] = −23 (non-printable (non-printable(non-printable (non-printable character) character) character)character) S2736 loc_iIndex = 1 loc_iIndex = 2 loc_iIndex = 3 loc_iIndex= 4

Table 21 below shows the Base64 Alphabet used for the Base64 encoding asdescribed by RFC 2045. The Base64 encoding ensures that the text withinthe email message contains these legal characters. TABLE 21 ValueEncoding 0 A 1 B 2 C 3 D 4 E 5 F 6 G 7 H 8 I 9 J 10 K 11 L 12 M 13 N 14O 15 P 16 Q 17 R 18 S 19 T 20 U 21 V 22 W 23 X 24 Y 25 Z 26 a 27 b 28 c29 d 30 e 31 f 32 g 33 h 34 i 35 j 36 k 37 l 38 m 39 n 40 o 41 p 42 q 43r 44 s 45 t 46 u 47 v 48 w 49 x 50 y 51 z 52 1 53 2 54 3 55 4 56 5 57 658 7 59 8 60 9 61 0 62 + 63 / (pad) =

By changing the mapping of the value to encoding, the Base64 Alphabetwill result in a different encoding. For example, the upper caseencoding can be switched with the lower case encoding such that thevalues 0 through 25 corresponds to a through z and values 26 through 51corresponds to A through Z. This new Base64 Alphabet will result inencoded string that will differ from the original Base64 Alphabet. Forthe string “Help”, the base64 encoding for the original Base64 Alphabetwill produce the string “SGVscA==” where as the new Base64 Alphabet willproduce the string “sgvSCa==”. Thus, variations of the base64 encodingcan be achieved by modifying the Base64 Alphabet. The purpose of thebase64 encoding is to produce strings that contain characters within therange of printable characters that can be placed into the emailmessages. The encryption method as described in FIGS. 21A and 21Bproduces strings that contain non-printable characters. Thus theencrypted strings cannot be placed immediately into the email messagebut must be first base64 encoded and then placed into the email message.

FIG. 22 is a flowchart describing the scrambling method used to scramblethe information about the monitored devices before placing it into theemail message. In step S2802, the information about the monitored deviceis encrypted using any variations of the simple encryption method. Oncethe information is encrypted, then in step S2804, the encryptedinformation is encoded using any variation of the base64 encodingmethod. Once encoded, the encrypted and encoded information is placedinto the email message in step S2806. The reason that scramblingrequires the combination of encryption and encoding is that encryptionmay result in character values in the string that are illegal to beplaced in the email. Encoding ensures that the character values in thestring are legal to be placed in the email.

It is important to note that the recipient of the email message is notfor human reading. A system to which the email message is sent to willunscramble and parse the email message without any human intervention.The encryption and encoding will make the email message unreadable to aperson viewing the message. As long as the mail agent accepts the emailmessage, the receiving system can decrypt, decode, and parse the emailmessage to obtain the information about the monitored devices.

FIG. 23 shows the format of the email message sent by the Data TransferPackage. The email message 2100 consists of four components—the emailheader 2102, the MIME attachment header 2104, the MIME attachment 2106,and the end of the email 2108. The email header 2102 containsinformation about the source, the destination, the date, and the subjectof the email message. Also, it contains information about theverification of the email message in the comment of the email message.The MIME attachment header 2104 contains information about the filenameof the MIME attachment and the encoding used. The MIME attachment 2106contains the encrypted and encoded information about the monitoreddevices. The end of the email 2108 contains the termination of the emailmessage. Refer to RFC 822, “STANDARD FOR THE FORMAT OF ARPA INTERNETTEXT MESSAGES” for the contents of the email message. Refer to RFC 1521,RFC 1522, and RFC 2045 for the description of the MIME attachment.

FIG. 24 shows an example of the email message created in CMailMessagecorresponding to the format shown in FIG. 23. The comment field containsthe combined string of the subject and date field that has beenencrypted and encoded. The MIME attachment contains the statusinformation or configuration information of the monitored devices thathas been encrypted and encoded.

FIG. 25 is a flowchart for creating the email message. Step S2302 isbroken down into more detailed steps showing the creation of the mailheader. Included in the detailed steps is the verification scheme usedto validate the email message in steps S2306 to S2312. The verificationscheme involves encrypting and encoding the combined string of one ormore fields of the email message and setting this string in the commentfield. The string in the comment field consists of readable charactersbut it appears as a meaningless string of characters. The recipient ofthis email message must decode and decrypt the comment string to verifythe email message. The steps of this flowchart will result in an emailmessage of the format shown in FIG. 23.

The verification scheme involves combining the strings of one or morefield of the email message. It is possible to use the combination of anyfield such as the subject field, date field, source address (fromfield), destination address (to field), boundary name, and filename. Theverification scheme can use any number of these strings to create thecomment field.

The verification scheme involves the encryption of the combined stringin step S2308. The design of the Data Transfer package allows for anyencryption method by the use of abstract class CAbsEncrypter 2012. TheCNullEncrypter 2014 class and CSimpleEncrypter 2016 class provide twoencryption methods to encrypt the combined string. New encryptionmethods can be used by adding new derived classes of the CAbsEncrypter2012 class. The encryption methods can result in a string that containsnon-readable characters.

The verification scheme involves the encoding of the encrypted string instep S2310. The design of the Data Transfer package shows the use of thebase64 encoding of the encrypted string where the encoding will resultin a string with one of the following readablecharacters—ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/.The encoding must result in a string containing readable characters sothat it may be placed in the comment field. However, the base64 encodingcan be modified so that new encoding method will result in a string withthe readable characters.

The verification scheme shows that the encryption step S2308 andencoding step S2310 occurs once. However, it is possible that theverification scheme may be modified to perform the encryption andencoding methods multiple times.

With the aforementioned variations in fields used, encryption methods,and encoding methods, there are many possible variations in theverification schemes of the email message.

FIG. 26 is a flowchart for a sample verification in which the subjectand date field are used. Even though the subject and date fields areused in the verification, any field in the email message can be used inthe verification.

FIG. 27 shows the package diagram of a ReceiveStore package.ReceiveInterfaceManager 1100 package is responsible for providing theinterface to the ReceiveStore package. ReceiveInterfaceManager 1100package is also responsible for managing the operations of the otherpackages to obtain the configuration and status information from themail server and to store the information in the database. TheDataRetriever 1102 package is responsible for parsing the lines of theemail message to obtain the configuration and status information. ThePOP3Processor 1104 package is responsible for retrieving the emailmessages from the POP3 mail server. The ODBC 1106 package is responsiblefor storing the configuration and status information in the database.The Common 1108 package is a utility package allowing the sharing of theuseful classes and base classes.

FIG. 28 shows the class diagram of the POP3Processor 1104 package ofFIG. 27. The CPop3Processor 1200 class is the interface for this packageto obtain the email message using POP3. The CPop3 1202 class implementsthe POP3 protocol. The CPop3 1202 class uses the CSocket 1220 class ofthe Microsoft Foundation Class library (MFC) to implement the POP3protocol. The CMessageParser 1204 class parses the email messagesobtained from the POP3 server into its various components. TheCMailMessage 1206 class contains the various components of the emailmessage. The CMailMessage 1206 class implements the verification schemefor the email message. The CMailMessage 1206 class obtains the base 64decoded and decrypted data from the MIME attachment. The CAbsDecrypter1208 class is an abstract class that provides the virtual interfacefunction to decrypt the data. The CNullDecrypter 1210 class is derivedfrom the CAbsDecrypter 1208 class and provides a method for decryptingthe data. The CNullDecrypter 1210 class does not perform any decryptionon the data. The CSimpleDecrypter 1212 class is derived from theCAbsDecrypter 1208 class and performs a simple method for decrypting thedata. The CBase64Decoder 1214 class performs the Base64 decoding of thedata. The CReceiveSystemRegistry 1216 class is derived from theCBaseSystemRegistry 1218 base class located in the Common package. TheCReceiveSystemRegistry 1216 class provides this package with informationfrom the system's registry necessary for accessing the mail server.

Table 22 below shows the public and private functions of theCMailMessage 1206 class and Table 23 below shows the attributes of theCMailMessage 1206 class that are used by the functions. TABLE 22Function Name Description Public CMailMessage( ) Constructor˜CMailMessage( ) Destructor void resetMailMessage( ) Resets theattributes of CMailMessage void setSubject(std::string& in_sSubject)Sets the subject in CMailMessage void setDate(std::string& in_sDate)Sets the date in CMailMessage void setComment(std::string& in_sComment)Sets the comment in CMailMessage void setBoundary(std::string&in_sBoundary) Sets the boundary in CMailMessage voidsetFilename(std::string& in_sFilename) Sets the filename in CMailMessagebool addToMIMEAttachment(std::string& Adds to the MIME attachment inin_sMIMEAttachment) CMailMessage void completeMailMessage( ) Completesthe mail message in CMailMessage void verifyMailMessage( ) Verifies themail message bool isMailMessageValid( ) Returns if the mail message isvalid or not bool getNextLineOfMessage(std::string& Gets a line of themail message out_sLineOfMessage) Private CAbsDecrypter*createDecrypter(DecrypterType Creates the decrypter used for thein_DecrypterType) verification scheme and for the decryption of the MIMEattachment

TABLE 23 Type Attribute Name Description CBase64Decoder m_Base64DecoderThis attribute member Base64 decodes the MIME attachment. std::auto_ptrm_pDecrypter This attribute member decrypts the MIME attachment.<CabsDecrypter> This attribute member is created in createDecrypter().bool m_bIsMessageValid This attribute member indicates if the mailmessage is vaild. std::string m_sSubject This attribute memberrepresents the string for the subject field of the mail message.std::string m_sDate This attribute member represents the string for thedate field of the mail message. std::string m_sComment This attributemember represents the string for the comment field of the mail message.std::string m_sBoundary This attribute member represents the string forthe boundary separator for the MIME attachment. std::string m_sFilenameThis attribute member represents the string for the filename of the MIMEattachment. std::string m_sMessage This attribute member represents thestring for the Base64 decoded and decrypted message. boolm_bIsFirstLineRead This attribute member determines if the first line ofthe MIME attachment has been read. std::vector<std::string> m_AttachmentThis attribute member represents the lines of the MIME attachment.std::vector<std::string>::iterator m_Attachment Iterator This attributemember points to the line of the MIME attachment currently beingaccessed.

The format of the email message received and retrieved by thePOP3Processor 1104 package is shown in FIG. 23. The CMailMessage 1206class will contain the various components of email message as shown inFIG. 23. FIG. 24 shows an example of the email message corresponding tothe format shown in FIG. 23.

FIG. 29 is an interaction diagram corresponding to the class diagram ofFIG. 28 describing the interaction between the classes in retrieving theemail message. To retrieve the email message, CPop3Processor 2900 callsresetMailMessage( ) of CMailMessage 2908 to reset the attributes ofCMailMessage 2908. CPop3Processor 2900 calls initiateRetrieve( ) ofCPop3 2902 to initiate connection with the POP3 server that contains theemail message. CPop3Processor 2900 calls getNumberOfMessage( ) of CPop32902 to obtain the number of messages in the POP3 server. CPop3Processor2900 calls getNextMessage( ) of CPop3 2902 to obtain a message from thePOP3 server. In turn, CPop3 2902 calls parseMailMessage( ) ofCMessageParser 2906 to parse the email message obtained from the POP3server. As CMessageParser 2906 obtains the various components of theemail message, it puts those components into CMailMessage 2908 bycalling the different set functions and the add function of CMailMessage2908. After CMessageParser 2906 obtains the components of the emailheader and sets it value in CMailMessage 2908, it callsverifyMailMessage( ) of CMailMessage 2908 to execute the verificationscheme of the email message. CMessageParser 2906 calls is MessageValid() of CMailMessage 2908 to determine if the email message contains theinformation about the monitored devices. After the email message hasbeen obtained, CPop3Processor 2900 calls deleteMessage( ) of CPop3 2902to remove the message from the POP3 server.

FIG. 30 is a flowchart for parsing the email message. Step S1502 isbroken down into more detailed steps showing the parsing of the emailheader. Included in the detailed steps is parsing the Date field,Subject field, Comment field, MIME boundary, and other fields from theemail header in steps S1504 to S1506. After the email header is parsed,the email message is verified to determine if it contains informationabout the monitored devices in step S1508. Step S1508 is broken downinto more detailed steps showing the verification scheme in steps S1510to S1514. The verification scheme involves decoding the comment stringin step S1510, decrypting the decoded string in step S1512, andcomparing the decrypted string with the combined string of one or moreof the fields of the email message in step S1514. If they are the same,the email message is a valid message containing information about themonitored devices. Otherwise, the email message is an invalid message.

The mail message is checked to see if it is valid in step S1516. If itis valid, parse the rest of the email message in steps S1518 to S1522.Otherwise, parse the email message until the end of the email message instep S1524.

The verification scheme to validate the email message depends upon theverification scheme used by the MonitorSend package of FIG. 6 to createthe comment field. Whichever fields of the email message, encryptionmethod, and encoding method are used to set the verification in thecomment field of the email message, the corresponding decoding method,decryption method, and fields of the email message must be used on thecomment field to validate the email message.

FIG. 31 is a flowchart for a sample verification in which the subjectand date field are used. Even though the subject and date fields areused in the verification, any field in the email message can be used inthe verification.

The foregoing description of the preferred embodiment of the presentinvention has been presented for purposes of illustration anddescription. It is not intended to be exhaustive or to limit theinvention to the precise form disclosed, and many modifications orvariations are possible in light of the above teaching. For example, anyone or more of the concepts described or shown herein may be applied tothe system and/or method disclosed in related application Ser. No.09/756,120. Moreover, any concept or feature described in relatedapplication Ser. No. 09/756,120 may be applied to the systems or methodsdisclosed herein. The embodiments were chosen and described to bestexplain the principles of the invention and its practical applicationsthereby enable others skilled in the art to utilize the invention andvarious embodiments and with various modifications as are suited to theparticular use contemplated. It is intended that the scope of thepresent invention be defined only by the claims appended hereto.

1. A method for a monitoring device to obtain an identifier of amonitored device, comprising: obtaining vendor information of themonitored device; accessing the monitored device using a first method toattempt to obtain the identifier using the vendor information; if theidentifier is not obtained in the accessing step, obtaining a MACaddress of the monitored devices as the identifier; if the MAC addressis not obtained, generating the identifier using a second method; andstoring the identifier of the monitored device for use by the monitoringdevice.
 2. The method of claim 1, wherein the identifier is at least oneof a serial number, a randomly generated string, and the (MAC) addressof the monitored device.
 3. The method of claim 1, wherein if theaccessing step comprises: accessing the monitored device using SNMP toobtain a serial number of the monitored device as the identifier.
 4. Themethod of claim 3, wherein the generating step comprises: generating theidentifier using a random number generator. 5-9. (canceled)
 10. Themethod of claim 1, further comprising: obtaining status information fromthe monitored device; and storing the obtained status information inassociation with the identifier of the monitored device. 11-12.(canceled)
 13. A monitoring device for obtaining an identifier of amonitored device, configured to: obtain vendor information of themonitored device; access the monitored device using a first method toattempt to obtain the identifier using the vendor information; if theidentifier is not obtained in the accessing step, obtain a MAC addressof the monitored devices as the identifier; if the MAC address is notobtained, generate the identifier using a second method; and store theidentifier of the monitored device for use by the monitoring device. 14.The monitoring device of claim 13, wherein the identifier is at leastone of a serial number of the monitored device, a randomly generatedstring, and the MAC address of the monitored device.
 15. The monitoringdevice of claim 13, further configured to access the monitored deviceusing SNMP to obtain a serial number of the monitored device as theidentifier.
 16. The monitoring device of claim 15, wherein themonitoring device is configured to generate the identifier using arandom number generator. 17-21. (canceled)
 22. The monitoring device ofclaim 13, further configured to obtain status information from themonitored device and to store the obtained status information inassociation with the identifier of the monitored device. 23-24.(canceled)
 25. An apparatus, comprising: means for obtaining vendorinformation of the monitored device; means for accessing the monitoreddevice using a first method to attempt to obtain the identifier usingthe vendor information: means for obtaining a MAC address of themonitored devices as the identifier, if the identifier is not obtainedin the accessing step; means for generating the identifier using asecond method, if the MAC address is not obtained; and means for storingthe identifier of the monitored device for use by the monitoring device.26. A computer program product embodied on one or more storage media,the computer program product causing a monitoring device to obtain anidentifier of a monitored device by performing the steps of: obtainingvendor information of the monitored device; accessing the monitoreddevice using a first method to attempt to obtain the identifier usingthe vendor information: if the identifier is not obtained in theaccessing step, obtaining a MAC address of the monitored devices as theidentifier; if the MAC address is not obtained, generating theidentifier using a second method; and storing the identifier of themonitored device for use by the monitoring device.
 27. A computerprogram signal embodied in an electromagnetic carrier wave, the signalcontaining program code comprising: means for obtaining vendorinformation of the monitored device; means for accessing the monitoreddevice using a first method to attempt to obtain the identifier usingthe vendor information; means for obtaining a MAC address of themonitored devices as the identifier, if the identifier is not obtainedin the accessing step; means for generating the identifier using asecond method, if the MAC address is not obtained; and means for storingthe identifier of the monitored device for use by the monitoring device.